装饰模式
装饰器模式:创建一个装饰类来包装原来的类,在不改变原来类结构不变的情况下,扩展其功能。 装饰模式是继承的一个替代模式,这里有一个合成复用原则:尽量使用对象组合,而不是继承来达到复用的目的(优先has-a而非is-a)。装饰类和被装饰类可以独立发展,不会相互耦合,不会受到继承的约束。
装饰器模式的本质:动态组合。
装饰模式中的角色
Component(抽象构件):ConcreteComponent和Decorator的共同父类,声明在具体构件中需要的业务方法,可以使客户端以一致的方式处理未被装饰的对象以及装饰之后的对象,实现客户端的透明操作。
ConcreteComponent(具体构件):Component的子类,定义具体的构件对象,实现Component中声明的方法,装饰器就是给该角色增加额外的方法。
Decorator(抽象装饰类):Component的子类,用于给ConcreteComponent增加方法(仅声明),维护一个指向Component引用。
ConcreteDecorator(具体装饰类):Decorator的子类,负责向构件添加新的职责。每一个具体装饰类都定义了一些新的行为,它可以调用在抽象装饰类中定义的方法,并可以增加新的方法用以扩充对象的行为。