装饰者模式
动态地给一个对象添加一些额外的职责。就增加功能来说, Decorator模式相比生成子类更为灵活。该模式以对客 户端透明的方式扩展对象的功能。
其中具体涉及的角色有:
(1)抽象组件:定义一个抽象接口,来规范准备附加功能的类
(2)具体组件:将要被附加功能的类,实现抽象构件角色接口
(3)抽象装饰者:持有对具体构件角色的引用并定义与抽象构件角色一致的接口
(4)具体装饰:实现抽象装饰者角色,负责对具体构件添加额外功能。
其典型的应用场景是java io中的缓冲流,如BufferedWriter,BufferedReader...,它们在Writer,Reader的逻辑基础上进行了扩展。
比如下面是OutputStreamWriter(Writer的具体实现类)的write方法
对比BufferedWriter的write方法,它在OutputStreamWriter的write方法基础上扩展了诸多功能(同步锁,流关闭检验,缓存)
下面单独举例说明:
场景:程序员经常使用编辑器来编写代码,编辑器有文本编辑器,也有IDE,IDE明显更加强大了。
测试代码(可见装饰类在原有被装饰类基础上扩展了一些特有功能):
其实继承也可以实现类似装饰效果,但是如果被装饰类被final修饰,无法实现extends情况下,装饰者模式就派上用场了。