装饰器设计模式
2018, Apr 20
装饰器设计模式
装饰器模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。
- 优点:动态地扩展一个实现类的功能
- 缺点:多层的装饰是比较复杂的,尽量减少装饰类的数量
-
抽象构件
public abstract class Component { // 抽象的方法 public abstract void operate(); }
-
具体构件:需要被装饰的类
public class ConcreteComponent extends Component { // 具体实现 @Override public void operate() { System.out.println("do Something"); } }
-
抽象装饰者:若只有一个装饰类,则可以没有抽象装饰角色
public abstract class Decorator extends Component { private Component component = null; //通过构造函数传递被修饰者 public Decorator(Component _omponent){ this.component = component; } //委托给被修饰者执行 @Override public void operate() { this.component.operate(); } }
-
具体装饰者
public class ConcreteDecorator1 extends Decorator { //定义被修饰者 public ConcreteDecorator1(Component component){ super(component); } //定义自己的修饰方法 private void method1(){ System.out.println("method1 修饰"); } //重写父类的Operation方法 public void operate(){ this.method1(); super.operate(); } }
测试函数
public class Client {
public static void main(String[] args) {
Component component = new ConcreteComponent();
//第一次修饰
component = new ConcreteDecorator1(component);
component.operate();
}
}