往内存中写入流... 从内存中读取流... ======使用默认装饰类:test123 压缩数据 往内存中写入流... 从内存中读取流... ======使用压缩装饰类:压缩[test123] 将数据转换为7位ASCII码 往文件中写入流... 从文件中读取流... ======使用ASCII装饰类:ASCII[test123] 将数据转换为7位ASCII码 压缩数据 往文件中写入流... 从文件中读取流... ======使用ASCII和压缩装饰类:压缩[ASCII[test123]]
四、模式优缺点
优点:
1、 对于扩展一个对象的功能,装饰模式比继承更加灵活性,不会导致类的个数急剧增加。
2、可以通过一种动态的方式来扩展一个对象的功能,通过配置文件可以在运行时选择不同的具体装饰类,从而实现不同的行为。
3、可以对一个对象进行多次装饰,通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合,得到功能更为强大的对象。
4、具体构件类与具体装饰类可以独立变化,用户可以根据需要增加新的具体构件类和具体装饰类,原有类库代码无须改变,符合“开闭原则”。
5、避免在层次结构高层的类有太多的特征。高层的类越简单,其可扩展性,灵活性越好。可以定义一个简单的类,然后使用Decorator类给它逐渐添加功能。
缺点:
1、 使用装饰模式进行系统设计时将产生很多小对象,这些对象的区别在于它们之间相互连接的方式有所不同,而不是它们的类或者属性值有所不同,大量小对象的产生势必会占用更多的系统资源,在一定程序上影响程序的性能,也增大了学习系统的复杂度。
2、装饰模式提供了一种比继承更加灵活机动的解决方案,但同时也意味着比继承更加易于出错,排错也很困难,对于多次装饰的对象,调试时寻找错误可能需要逐级排查,较为繁琐。
3、Decorator与它的Component不一样,Decorator只是透明的包装,所以客户端使用时不应该依赖Decorator。