该篇主要说的是装饰模式。
定义
动态的给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。
角色
Component抽象构件
是一个接口或者是抽象类。
ConcreteComponent具体构件
实现类。
Decorator装饰角色
一般是一个抽象类,实现接口或者抽象方法。属性里必然有一个private变量指向Component抽象构件。
具体角色
具体装饰类。
代码
抽象构件
public abstract class Component {
public abstract void operate();
}
具体构件
public class ConcreteComponent extends Component {
@Override
public void operate() {
System.out.println("do something");
}
}
抽象装饰类
public class Decorator extends Component {
private Component component = null;
public Decorator(Component component) {
this.component = component;
}
@Override
public void operate() {
this.component.operate();
}
}
具体的装饰类
public class ConcreteDecorator extends Decorator {
public ConcreteDecorator(Component component) {
super(component);
}
private void method(){
System.out.println("do something method");
}
@Override
public void operate() {
this.method();
super.operate();
}
}
装饰模式的优缺点
优点
- 装饰类和被装饰类可以独立发展,而不会相互耦合。
- 装饰模式是继承关系的一个替代方案。
- 装饰模式可以动态地扩展一个实现类的功能。
缺点
多层的装饰是比较复杂的。