装饰器模式,顾名思义就是指给某个东西加点装饰,一个大美女,你给她戴个项链,戒指,手镯等等装饰一下会更漂亮。
如图所示,想要实现哪些功能,如果使用继承的话太麻烦了,加个外壳 继承坦克类,加个血条继承坦克类,加个尾巴还要继承坦克类,父类变了子类还需要跟着变,装饰和被装饰者之间耦合度太高了。这样下去会类爆炸的。那怎么办呢?
TankDecorator 里面有个属性呢是tank,然后给他加点装饰,这里是将具体的子类和decorator耦合到一起了,如果要给子弹加装饰,这个就不行了。
这里我们给父类gameObject 聚合到Decorator中,这与不管子弹还是坦克都可以给他加装饰,如果想两种装饰都加,你可以写一个docorator 直接聚合你需要的decorator 加上你本身的装饰。代码可能更直观一点,下面是我写的一个demo
以饮料为例
饮料抽象类里有两个方法,一个是描述,一个是费用
然后三种具体的饮料都继承饮料类 ,重写描述和费用类
写一个调料的装饰者抽象类继承饮料类
三种调料类 重写描述和费用方法
最后来输出一下结果,大家可以看到修饰的调料都被输出来了,还是不明白的小伙伴可以自己写一下哦