装饰模式用于在不改变原类的情况下,扩展一个类的功能,这种扩展是动态的,动态的为一个对象增加功能,而且还动态撤销功能,但是有一个很不好的缺点就是将会产生大量的类对象,这些类对象之间可能会难以区分,并且随着动态添加的功能越多,代码会越来越难以阅读。
关于装饰模式,我们最容易想到的是Java的IO
装饰模式有一个很明显的套路,就是被装饰类会作为参数传给修饰类,然后一直延伸,直到我们得到我们想要的经过多次修饰的对象。装饰对象和被装饰对象需要实现一样的接口,然后修饰类对象会持有被修饰类的对象。
接下来我们举一个简单例子来说明一下怎么使用装饰模式
1、统一实现的接口
2、被修饰类和修饰类实现统一实现的接口
运行代码
运行结果如下
其实问题也是显而易见的,如果我们想要新增功能的话,那么就需要新增修饰类,这就导致修饰类越来越多,这带来的后果就是如果我们发现修饰类的代码出现了问题,这就带来毁天灭地的灾难了,所有的修饰类和被修饰类都需要改一遍。所以我个人对修饰模式其实并不是很讨好(毕竟本渣的代码出错率较高)。。