什么是装饰器模式?
装饰对象,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。
适用场景
在不改变现有组件结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰器模式来实现。
代码实现
通常情况下,扩展一个类的功能会使用继承方式来实现。但继承具有静态特征,耦合度高,并且随着扩展功能的增多,子类会很膨胀。
其次是使用组合关系来创建一个包装对象(即装饰对象)来包裹真实对象,并在保持真实对象的类结构不变的前提下,为其提供额外的功能,这就是装饰器模式的目标。
示例:
画一个圆形,然后用颜色装饰,画一个红色的圆形。
//画一个圆形,然后用颜色装饰,画一个红色的圆形。/*** 定义个接口 形状*/interface Shape {void draw();}/*** 具体的形状 圆形*/class Circular implements Shape {@Overridepublic void draw() {System.out.println("圆形");}}/*** 抽象的装饰器* 使用组合方式实现*/abstract class Decorator implements Shape {private Shape shape;public Decorator(Shape shape) {this.shape = shape;}@Overridepublic void draw() {//装饰功能 增加颜色colour();shape.draw();}protected abstract void colour();}/*** 装饰红色*/class RedDecorator extends Decorator {public RedDecorator(Shape shape) {super(shape);}@Overrideprotected void colour() {System.out.print("用红色画");}}/*** 装饰品模式测试*/public class DecoratorPattern {public static void main(String[] args) {//画个圆形Shape circular = new Circular();circular.draw();//装饰颜色Decorator redDecorator = new RedDecorator(circular);redDecorator.draw();//输出://圆形//用红色画圆形}}
