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