一、所用到的类
一个接口
N个实现类
一个实现该接口的抽象类(装饰类的接口)
N个装饰类(N种去装饰实现类的增强)
二、实现代码
接口
java
public interface Shape {
void draw();
}
接口实现类1
java
public class Circle implements Shape{
@Override
public void draw() {
System.out.println("绘制圆形");
}
}
接口实现类2
java
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("绘制矩形");
}
}
装饰器抽象类
java
public abstract class ShapeDecorator implements Shape {
protected Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape)
{
this.decoratedShape = decoratedShape;
}
public abstract void applyColour();
}
装饰器实现类1
java
public class RedShapeDecorator extends ShapeDecorator{
public RedShapeDecorator(Shape decoratedShape) {
super(decoratedShape);
}
@Override
public void draw() {
decoratedShape.draw();
applyColour();
}
@Override
public void applyColour() {
System.out.println("涂上红色");
}
}
###调用类
java
@SpringBootApplication
public class DecoratorApplication {
public static void main(String[] args) {
Shape circle = new Circle();
Shape redCircle = new RedShapeDecorator(new Circle());
Shape redRectangle = new RedShapeDecorator(new Rectangle());
redCircle.draw();
redRectangle.draw();
}
}

三、结论
和代理模式差不多