装饰模式
设计原则:遵循迪米特、单一职责、开闭原则,破坏里氏替换,体现功能复用
常用场景:一个类需要动态的添加功能,且这些功能可以相互叠加
使用概率:99.99999%
复杂度:中
变化点:动态添加的功能或者说装饰器
选择关键点:添加的功能是否需要动态组装
逆鳞:无
主要思想:
创建装饰类继承或实现 需要被装饰类相同的父类或接口
持有被装饰类实例
调用被装饰类方法在前后可增加功能
和代理模式的区别在于,理论上装饰模式不控制持有的对象,只是增加一些装饰
代理模式理论上,被代理类是不可直接用的,持有代理对象,可控制其执行与否
public interface MyInterface {
public void do1();
public void do2();
}
public class MyClass implements MyInterface {
@Override
public void do1() {
System.out.println("my do1");
}
@Override
public void do2() {
System.out.println("my do2");
}
}
public class MyDecrator implements MyInterface{
private MyInterface myInterface;
public MyDecrator(MyInterface myInterface) {
this.myInterface = myInterface;
}
@Override
public void do1() {
System.out.println("装饰前1");
myInterface.do1();
System.out.println("装饰后1");
}
@Override
public void do2() {
System.out.println("装饰前2");
myInterface.do2();
System.out.println("装饰后2");
}
}