Java 设计模式之装饰模式

戏子无情 提交于 2019-12-10 11:41:26

装饰模式有点类似于责任链,但是还是有区别,直接上代码 然后运行下 自己体会,

 

这是文件构成 总计 5个  外加一个 运行实体类 Factory

一  AbstractDecorator 类
public class AbstractDecorator extends GatewayComponent {

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

二 BasicComponentGateway 类
public class BasicComponentGateway extends GatewayComponent {
    @Override
    public void service() {
        System.out.println("第一步>>> 网关中获取基本操作...实现");
    }
}

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

 

三 GatewayComponent 类

public abstract class GatewayComponent {
    public abstract void service();
}

四 LimitDecoratory 类

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

    @Override
    public void service() {
        super.service();
        System.out.println("第三步>> 网关限制APi接口");
    }
}

五 LogDecorator 类

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

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

六 运行类 Factory

public class Factory {

    public static GatewayComponent getGatewayComponent() {
//        BasicComponentGateway basicComponentGateway = new BasicComponentGateway();
//        LogDecorator logDecorator = new LogDecorator(basicComponentGateway);
//        LimitDecoratory limitDecoratory = new LimitDecoratory(logDecorator);

        return new LimitDecoratory(new LogDecorator(new BasicComponentGateway()));
    }

    public static void main(String[] args) {
        LimitDecoratory a = (LimitDecoratory) Factory.getGatewayComponent();
        a.service();
    }
}

下边 是运行结果

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!