设计模式-装饰器模式

一、所用到的类

一个接口

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();
    }
}

三、结论

和代理模式差不多