装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
意图
动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。
实现
实现以下功能
我们有2个形状,开始只能绘制图形,之后加入装饰就可以添加颜色
- 创建接口
public interface Shape{
void draw();
}
- 实现接口
public class Circle implements Shape{
@Override
public void draw() {
System.out.println("绘制圆形");
}
}
public class Rectangle implements Shape{
@Override
public void draw() {
System.out.println("绘制矩形");
}
}
- 添加装饰
public class ShapeDecorator implements Shape{
private Shape mShape;
private String mColor;
public ShapeDecorator(Shape shape,String color) {
this.mShape = shape;
this.mColor = color;
}
@Override
public void draw() {
mShape.draw();
System.out.println("装饰上颜色: " + mColor);
}
}
- 使用
public void main(String... args) {
Shape shape;
shape = new ShapeDecorator(new Circle(),"红色");
shape.draw();
shape = new ShapeDecorator(new Rectangle(),"蓝色");
shape.draw();
}