装饰者模式
-
定义:动态地给一个对象添加一些额外的职责就增加功能来说,装饰模式相比生成子类更为灵活。
-
UML类图:
装饰者模式
-
综合分析:
优点:
- 装饰者和被装饰者相互解藕。
- 继承的替换方案,更灵活地实现“继承”特性。
- 动态的扩展功能类,完全符合“开闭原则”。
缺点:
- 多层装饰,会造成代码复杂性。
适用场景:
- 扩展一个类的功能。
- 功能的多变性,随时动态增加功能。
- 为一批兄弟类进行改装,首选装饰者模式。
-
总结:装饰者模式的关键在于Component的operate()方法,整个模式都是以该方法展开装饰。思想需要大家去琢磨和体会,加油!
装饰者模式实践
组建抽象类
public abstract class Component{
public abstract void operate();
}
被装饰类
public class ConcreteComponent extends Component {
@Override
public void operate() {
System.out.println("I am a Component!");
}
}
装饰类组
public abstract class AbstractDecorator extends Component {
public Component component = null;
public AbstractDecorator(Component c) {
component = c;
}
@Override
public abstract void operate();
}
public class ConcreteDecoratorA extends AbstractDecorator {
public ConcreteDecoratorA(Component c) {
super(c);
}
@Override
public void operate() {
component.operate();
System.out.println("Add DecoratorA");
}
}
public class ConcreteDecoratorB extends AbstractDecorator {
public ConcreteDecoratorB(Component c) {
super(c);
}
@Override
public void operate() {
System.out.println("Add DecoratorB");
component.operate();
}
}
客户端类
public class client {
public static void main(String[] args) {
Component component = new ConcreteComponent();
component = new ConcreteDecoratorA(component);
component.operate();
component = new ConcreteDecoratorB(component);
component.operate();
}
}
网友评论