装饰器模式
定义
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
类图
Component
增加功能时的核心角色
ConcreteComponent
实现了Component角色所定义的接口
Decorator(装饰物)
具有和Component相同的接口,在它内部保存了被装饰对象-Component。它知道自己要装饰的对象。
ConcreteDecorator(具体的装饰物)
具体的Decorator。
示例
类图
Border
1 | public abstract class Border extends Display { |
Display
1 | public abstract class Display { |
FullBorder
1 | public class FullBorder extends Border { |
SideBorder
1 | public class SideBorder extends Border { |
StringDisplay
1 | public class StringDisplay extends Display { |
Main
1 | public class Main { |
总结
在Decorator模式中,装饰边框与被装饰物具有相同的接口。虽然接口是相同的,但是越装饰,功能则越多。此时我们完全不需要对被装饰的类做任何修改。这样就实现了不修改被装饰的类即可增加功能。
Decorator模式中使用到了委托,它是类之间形成了弱关联关系。因此,不用改变框架代码,就可以生成一个与其他对象具有不同关系的新对象。