Decorator =装饰器模式
想为原来的类,加一点装饰。
最简单最直观的方式就是写一个子类去继承。但是一旦要加很多装饰,这种继承的方式一定会不方便,会产生继承爆炸。而且父类一变,子类跟着变,非常不方便,耦合度太高了。(这个时候可能会想到代理,这个很好,设计模式学到最后,你会觉得用这个也可以,用那个也可以)
Decorator 的解决方式:它是这么来用的,用聚合代替继承。
比方想为坦克 Tank 添加一个装饰:
(一)版本:
- Tank
- TankDecorator
- tank (这个地方写tank有问题)
- paint() -> tank.paint() + 装饰
问题点:如果我想对子弹做装饰,由于写死的是tank,所以只能另外写一个BulitDecorator。也就是把具体的某个子类和 Decorator 聚合到一起了。
所以这个地方把 tank 改为 gameObject,就可以。
不是很确定。
这个 Decorator 不再是对具体的类做装饰,而是对 GameObject 做装饰。都可以和某种具体的 GameObject 聚合到一起。而 Decorator 本身也是一个 GameObject ,如果想对一个具体的 GameObject 做多个装饰,只需把一个 Decorator 扔进去 另一个 Decorator 就可以。
Decorator 装饰器模式 和 Bridge 桥梁模式很像,不是语法上的区别,而是语义上的区别。