设计模式-装饰器

90 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

源码地址release分支

代码结构

在这里插入图片描述 需求:

不改变原有类 的功能下 添加新功能 把一个形状装饰上不同的颜色,同时又不改变形状类

/**
 * 功能描述:装饰器
 *
 * 不改变原有类 的功能下  添加新功能  代替了继承
 * 设计原则是 多用组合少用继承
 * 对扩展开放  对修改关闭
 *
 * 需求:把一个形状装饰上不同的颜色,同时又不改变形状类
 *
 * @author Songxianyang
 * @date 2022-02-20 13:23
 */
public abstract class Decorator implements Shape {
    private Shape shape;
    
    public Decorator(Shape shape) {
        this.shape = shape;
    }
    
    @Override
    public void colour() {
        shape.colour();
    }
}
/**
 * 功能描述: 装饰器的实现
 *
 * @author Songxianyang
 * @date 2022-02-20 13:34
 */
public class DecoratorRealize extends Decorator{
    public DecoratorRealize(Shape shape) {
        super(shape);
    }
    
    @Override
    public void colour() {
        super.colour();
        end();
    }
    
    private void end() {
        System.out.println("装饰器类方法执行完成");
    }
}
/**
 * 功能描述:形状
 *
 * @author Songxianyang
 * @date 2022-02-20 13:26
 */
public interface Shape {
    /**
     * 颜色
     */
    void colour();
}

/**
 * 功能描述:正方形
 *
 * @author Songxianyang
 * @date 2022-02-20 13:28
 */
public class Square implements Shape {
    
    @Override
    public void colour() {
        System.out.println("黑色");
    }
}
/**
 * 功能描述:
 *
 * @author Songxianyang
 * @date 2022-02-20 13:36
 */
public class Test {
    public static void main(String[] args) {
        Shape square = new DecoratorRealize(new Square());
        square.colour();
    }
}
/**
 * 功能描述:三角形
 *
 * @author Songxianyang
 * @date 2022-02-20 13:29
 */
public class Triangle implements Shape {
    /**
     * 这个类很多之前的方法
     */
    private void select() {
        System.out.println("无关方法");
    }
    
    private void update() {
        System.out.println("无关方法 update");
    }
    
    
    /**
     * 需求过来的新方法
     */
    @Override
    public void colour() {
        System.out.println("白色");
    }
    
    
}

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

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

参考链接:菜鸟教程之设计模式