我也常说的设计模式是23种设计模式,分为3大类:
- 创建型模式5种:工厂方法、抽象工厂、单例、建造者、原型
- 结构型模式7种:适配器、代理、桥接、装饰者、外观、享元、组合
- 行为型模式11种:模板方法、解释器、策略、观察者、迭代器、职责链、命令、备忘录、状态、访问者、中介者。
上次咱们说了“桥接模式”。今天咱们聊一聊结构型模式中的“装饰者模式”。
结构型模式重点在于结构的变化。
“装饰者模式”关键在于“装饰”,也就是在原有基础上,增加功能方法的结构设计。
接口
接口的实现类
如果以上作为“核心操作”。下面就要写“装饰”的结构了。
先建立一个抽象类实现接口,并实现接口中的实现方法(operation)。抽象类里组建了使用接口的属性,通过构造函数执行赋值对象。(Component com属性)。
抽象类里用到了“operation()”方法“递归”操作,如果你能仔细看,它的操作,只是不断的调用com对象的方法。当“装饰”里没有组件的Component属性的对象了就不会去调用了。为的是多重的“装饰”的解析而准备的。
装饰器的实现类ConcreteDecoratorA
装饰器的实现类ConcreteDecoratorB
在使用的时候 ConcreteDecoratorB的对象装饰ConcreteDecoratorA的对象装饰ConcreteComponent对象。调用operation()方法后,由于递归的作用有多少层次的装饰就有多少层的输出。这样装饰的功能一一展现。
今天设置一个场景,“孙悟空”的七十二变,变什么像什么,变成鸟它会飞,变成鱼它会游,但是无论变成生么都改不了猴子的本质。我们用装饰者模式来体现这一个过程。
“王”的接口,设置了类型的属性,和变化的抽象行为。
实现接口的猴王类。
孙悟空拥有七十二变的能力,这一能力就是“装饰器”体现。
实现可装饰的鱼
实现可装饰的鸟
实现调用,孙悟空的对象为“核心对象”,装饰成鸟,再装饰成鱼,再装饰成鸟,可以飞。
但是实际仍然是猴