装饰模式--Decrator
装饰模式:动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。
装饰模式可以在不创造更多的子类的模式下,将对象的功能加以扩展。
装饰模式与类继承的区别:
1) 装饰模式是一种动态行为,对已经存在类进行随意组合,而类的继承是一种静态的行为,一个类定义成什么样的,该类的对象便具有什么样的功能,无法动态的改变。
2) 装饰模式扩展的是对象的功能,不需要增加类的数量,而类继承扩展是类的功能,在继承的关系中,如果我们想增加一个对象的功能,我们只能通过继承关系,在子类中增加两个方法。
3) 装饰模式是在不改变原类文件和使用继承的情况下,动态的扩展一个对象的功能,它是通过创建一个包装对象,也就是装饰来包裹真是的对象。
4) 装饰模式把对客户端的调用委派给被装饰的类,装饰模式的关键在于这种扩展完全透明的。
package com.qinsoft.design; /** * 装饰模式--结构型 */ interface Component { public void doSomething(); } //构建角色: class ConcreteComponent implements Component { @Override public void doSomething() { System.out.println("功能A"); } } //装饰角色: class Decorate implements Component { private Component component; public Decorate(Component component) { this.component = component; } @Override public void doSomething() { component.doSomething(); } } //装饰角色1: class ConcreteDecorate1 extends Decorate { public ConcreteDecorate1(Component component) { super(component); } @Override public void doSomething() { super.doSomething(); this.doAnotherDosomething(); } private void doAnotherDosomething() { System.out.println("功能B"); } } //客户端 public class Decrator { public static void main(String[] args) { Component component = new ConcreteDecorate1(new ConcreteComponent()); component.doSomething(); } }