设计模式装饰
装饰模式
设计原则:遵循迪米特、单一职责、开闭原则,破坏里氏替换,体现功能复用
常用场景:一个类需要动态的添加功能,且这些功能可以相互叠加
使用概率: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"); } }