🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 装饰模式 动态地给一个对象添加一些额外地职责,就增加功能来说,装饰模式比生成子类更为灵活(摘抄) 装饰模式在添加功能方面确实非常灵活,当你需要给已经生成地类添加一个新的方法的时候,用装饰模式真的是太方便了,你只需要知道自己需要给哪一个对象添加哪一个方法就ok了 装饰模式一般用在增加原有类的核心职责或主要行为,在主类中加入了新的字段,新的方法和新的逻辑,从而增加了主类的复杂度。 ~~~ public interface SuperC { void Operation(); } public class Concrete implements SuperC { @Override public void Operation() { //被修饰的类的基本操作 } } public class Decorator implements SuperC { SuperC super1; public void setSuper (Super super1) { this.super1 = super1; } @Override public void Operation() { if (super1 != null) { super1.Operation(); } } } public class DecoratorA extends Decorator { @Override public void Operation() { super.Operation(); // 自己的操作 } } public class DecoratorB extends Decorator { @Override public void Operation() { super.Operation(); // 自己的操作 } public void SpecialB() { } } public class DecoratorC extends Decorator { @Override public void Operation() { super.Operation(); // 自己的操作 } public void SpecialC() { } } ~~~ 调用代码: ~~~ public static void main (String args[]) { Concrete concrete = new Concrete(); DecoratorA a = new DecoratorA(); DecoratorB b = new DecoratorB(); DecoratorC c = new DecoratorC(); a.setSuper(concrete); //体现装饰模式优势的地方来了 b.setSuper(a); c.setSuper(a); } ~~~ 有没有看出来有什么好处呢? 给类动态添加所需方法的优势一下就体现了,当有需要两个两个对象分别有ab和ac两种方法,这样就可以很方便,而且当你需要添加更多的方法的时候,写一个Decorator的子类,然后添加你需要装饰的对象就可以了,继承于Decorator类的功能类都是起到为Concrete类添加功能的作用 这样做最大的好处就是有效的把类的核心职责和装饰功能区分开了。而且可以去除相关类中重复的装饰逻辑(摘抄)