设计模式系列——装饰模式

原创:花括号MC(微信公众号:huakuohao-mc),欢迎分享,转载请保留出处。

装饰模式主要用于在不改变类和对象的结构情况下,增加一些额外的功能。主要实现思路是定义一个装饰类,把原始类包含进来并提供额外的功能。

举个例子

假设有个图形类,可以画出对应的图形图案。在不改变原有图形类的情况下,如果希望给图形增加颜色,就可以考虑使用装饰模式。

先来看一下UML类图:

decorator.png

再来看一下具体代码实现逻辑。

图形接口,实现画图功能。

public interface Shape {
    void draw();
}
复制代码

一个Circle类 实现圆形

public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Shape: Circle");
    }
}
复制代码

定义一个图形装饰类,实现着色功能,先定义一个抽象的基础装饰类,该装饰类将原始类包含进来,其子类实现具体的颜色着色。

public abstract class ShapeDecorator implements Shape {

    //引用shap类
    protected Shape decoratedShape;

    public ShapeDecorator(Shape decoratedShape) {
        this.decoratedShape = decoratedShape;
    }

    @Override
    public void draw() {
        decoratedShape.draw();
    }
}
复制代码

具体着色子类 RedShapeDecorator,实现具体着色功能。

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 DecoratorPatternDemo {
    public static void main(String[] args){

        Shape circle = new Circle();

        //被装饰类修饰的Cirle,画出的圆是红色的。
        Shape redCircle = new RedShapeDecorator(new Circle());

        //普通圆
        circle.draw();
        //红色的圆
        redCircle.draw();
    }
}
复制代码

总结

装饰模式是结构模式之一,主要用于解决在不改变原有类和对象的结构情况下,给类和对象增加一些有用的小功能。

本文参考 www.tutorialspoint.com/design_patt…

推荐阅读

1. Java并发编程那些事儿(十)——最后的总结

2. 程序员应该掌握的常用网络问题定位工具

3. Awk这件上古神兵你会用了吗

4. 手把手教你搭建一套ELK日志搜索运维平台

猜你喜欢

转载自juejin.im/post/7079630910491983885
今日推荐