装饰者模式(Decorator)

2018-12-25  本文已影响0人  群众里面有坏人呐

定义

动态地给一个对象添加一些额外的职责。就增加功能来说, Decorator模式相比生成子类更为灵活。该模式以对客 户端透明的方式扩展对象的功能。

为什么要使用装饰者模式

角色

  1. 抽象组件:定义一个抽象接口,来规范准备附加功能的类
  2. 具体组件:将要被附加功能的类,实现抽象构件角色接口
  3. 抽象装饰者:持有对具体构件角色的引用并定义与抽象构件角色一致的接口
  4. 具体装饰:实现抽象装饰者角色,负责对具体构件添加额外功能。

实例

抽象组件

public interface Shape {
    void draw();
}

具体组件

public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("shape: rectangle");
    }
}

抽象装饰者

public abstract class ShapeDecorator implements Shape {
    protected Shape decoratedShape;
    public ShapeDecorator(Shape decoratedShape) {
        this.decoratedShape = decoratedShape;
    }
    public void draw(){
        decoratedShape.draw();
    }
}

具体装饰

public class RedShapeDecorator extends ShapeDecorator {
    public RedShapeDecorator(Shape decoratedShape) {
        super(decoratedShape);
    }
    @Override
    public void draw(){
        decoratedShape.draw();
        setRedBorder(decoratedShape);
    }
    private void setRedBorder(Shape decoratedShape){
        System.out.println("Border Color: Red");
    }
}

测试代码

public class Test {
    public static void main(String[] args) {
        Shape shape = new Rectangle();
        ShapeDecorator decorator = new RedShapeDecorator(shape);
        decorator.draw();
    }
}

运行结果

shape: rectangle
Border Color: Red
上一篇 下一篇

猜你喜欢

热点阅读