设计模式之——装饰者模式

时间:2019-10-07
本文章向大家介绍设计模式之——装饰者模式,主要包括设计模式之——装饰者模式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

装饰者模式

一、什么是装饰者?

装饰者模式允许向现有的对象添加新的功能,同时不改变其结构。

属于结构型模式。

创建了一个装饰类,用来包装原有的类,并在保持方法签名完整性的前提下,提供了额外的功能。

二、装饰者的介绍

1. 意图:

动态地给一个对象添加一些额外的职责。

2. 主要解决:

一般情况下,我们想扩展一个类经常使用继承的方式实现,由于继承为类引入了静态特征,并且随着扩展功能的增多,子类会膨胀。

3. 何时使用:

在不想增加很多子类的情况下扩展类

4. 使用场景:

(1) 扩展一个类的功能;(2) 动态增加功能,动态撤销。

三、code display

现在画图形,可以画两种图形:1. 圆形; 2. 正方形

//接口类
public interface Shape {
    void draw();
}
//圆形
public class Circle implements Shape{

    @Override
    public void draw() {
        System.out.println("Shape: Circle");
    }

}
//正方形
public class Rectangle implements Shape {

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

}

现要求,画出来的图形要能够边框要能够有颜色

首先创建一个装饰者类:

//装饰者类
public abstract class ShapeDecorator implements Shape {
    
    public Shape decoratedShape;
    
    public ShapeDecorator(Shape decoratedShape){
        this.decoratedShape = decoratedShape;
    }
    
    //装饰者类调用接口方法
    public void draw(){
        decoratedShape.draw();
    }
}
//红色装饰者子类
public class RedShapeDecorator extends ShapeDecorator{

    /**
     * @param decoratedShape
     */
    public RedShapeDecorator(Shape decoratedShape) {
        super(decoratedShape);
    }

    @Override
    public void draw() {
        decoratedShape.draw();
        setRedBorder(decoratedShape);
    }
    
    public void setRedBorder(Shape decoratedShape){
        System.out.println(" Border Color: Red ");
    }

}

原文地址:https://www.cnblogs.com/lfdingye/p/11630479.html