设计模式之装饰者模式

笔记内容来源于蚂蚁课堂

什么是装饰者模式

     在不改变原有对象的基础上附加功能,相比于子类更加灵活;

装饰者模式应用场景

动态的给一个对象添加或撤销功能

装饰者模式优缺点

优点:

在不改变原有对象的情况下对台扩展动能,可以使扩展的多个功能按照想要的顺序执行,以实现不同的效果

缺点:

需要更多的类,使程序复杂;

装饰着模式定义

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

装饰者模式结构类图
设计模式之装饰者模式_第1张图片
定义构建抽象的 附加功能的类

public abstract class GatewayComponent {
    /**
     * 定义共同附加行为方法标准..
     */
    public abstract void service();
}

定义被装饰的类

public class BasicComponentGateway extends GatewayComponent {

    public void service() {
        System.out.println("第一步>>> 网关中获取基本的操作...实现");
    }
}

定义抽象的装饰类

public class AbstractDecorator extends GatewayComponent {
    public AbstractDecorator(GatewayComponent gatewayComponent) {
        this.gatewayComponent = gatewayComponent;
    }

    public GatewayComponent gatewayComponent;

    public void service() {
        if (gatewayComponent != null)
            gatewayComponent.service();
    }
}

定义具体装饰类

public class LimitDecorator extends AbstractDecorator {
    public LimitDecorator(GatewayComponent gatewayComponent) {
        super(gatewayComponent);
    }

    @Override
    public void service() {
        super.service();
        System.out.println("第三步>>> 网关中新增API接口的限流..");
    }
}
public class LogDecorator extends AbstractDecorator {

    public LogDecorator(GatewayComponent gatewayComponent) {
        super(gatewayComponent);
    }

    @Override
    public void service() {
        super.service();
        System.out.println("第二步>>> 网关中新增日志收集..");
    }
}

源码角度分析装饰者模式

  1. Java I/O 中的装饰者模式
  2. Spring Session 中的装饰者模式
  3. Mybatis 缓存中的装饰者模式

Java I/O 中的装饰者模式

   它基于字符流(InputStream/OutPutStream)和字节流(Reader/Writer)作为基类

抽象构造角色: Reader
抽象的装饰类: FilterReader
设计模式之装饰者模式_第2张图片

责任链模式和装饰者模式的区别

责任链模式是一直往下执行,装饰者模式是执行时先找到父类,从父类开始执行,到最后执行第一行代码;

你可能感兴趣的:(设计模式,Java,设计模式,java)