定义
装饰者模式是可以在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。
结构
抽象构件角色 :定义一个抽象接口以规范准备接收附加责任的对象。
具体构件角色 :实现抽象构件。
抽象装饰角色 : 继承或实现抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
具体装饰角色 :实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。
实现
抽象装饰继承或实现抽象构件,内部持有抽象构件使得可以对构件增强。
在创建具体装饰角色时需要传入被装饰者,由于构件和装饰顶层都是构件,所以可以层层增强。
优点
装饰者模式可以带来比继承更加灵活性的扩展功能,使用更加方便,可以通过组合不同的装饰者对象来获取具有不同行为状态的多样化的结果。 装饰者模式比继承更具良好的扩展性,完美的遵循开闭原则,继承是静态的附加责任,装饰者则是动态的附加责任。
装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。
使用场景
当不能采用继承的方式对系统进行扩充或者采用继承不利于系统扩展和维护时。
在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
当对象的功能要求可以动态地添加,也可以再动态地撤销时。
装饰者模式举例
IO流中的包装类使用到了装饰者模式。BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter。