Java装饰模式
装饰模式是一种结构型设计模式,它允许向现有对象添加新功能而不改变其结构。该模式通过创建包装器对象来实现,这些包装器对象包裹原始对象,并在其上添加新的功能。
知识点介绍:
在装饰者模式中,包含四种类,分别是抽象构件类、具体构件类、抽象装饰者类、具体装饰者类,它们各自负责完成特定任务,并且相互之间存在紧密联系。其中:
l 抽象构件(Component)角色:定义一个抽象接口准备接收附加责任的对象。
l 具体构件(Concrete Component)角色:实现抽象构件,通过装饰角色为其添加一些职责。
l 抽象装饰(Decorator)角色:继承或实现抽象构件,聚合抽象构件,通过子类扩展具体构件的功能。
l 具体装饰(ConcreteDecorator)角色:实现抽象装饰的相关方法,扩展具体构件的职责。
装饰者模式可以在不改变现有对象结构的情况下,动态地给该对象增加一些额外职责(功能),以透明动态的方式来动态扩展对象的功能,也是继承关系的一种代替方案。
1. 角色:
· Component(组件):定义一个对象接口,可以动态地添加新的职责。
· ConcreteComponent(具体组件):实现了 Component 接口的具体对象,是被装饰的原始对象。
· Decorator(装饰器):持有一个 Component 对象的引用,并定义了与 Component 接口一致的接口,以便与 ConcreteComponent 协作。
· ConcreteDecorator(具体装饰器):实现了 Decorator 接口的具体装饰器,负责向组件添加新的职责。
2. 优点:
· 可以动态地给对象添加新的职责,而不会影响其原有功能。
· 可以通过组合多个装饰器来实现不同的组合效果,更灵活。
3. 缺点:
· 可能会产生过多的小对象,增加系统复杂度。
· 对于高层模块调用比较复杂。
代码示例:
1. 简单示例:咖啡加配料
2. Java IO 示例:BufferedInputStream