05.装饰模式

1.什么是装饰模式

在不改变原有对象的基础上实现增强

2.应用场景

io流中FilterReader()

3.装饰模式实现

链接:https://pan.baidu.com/s/1VTv9oJ1W8wuEXFWdZIlcRQ 
提取码:yyon

 

1)定义共同的方法标准

/**
 * 装饰接口标准
 * */
public abstract class GatewayComponent {

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

2)被装饰类

import com.demo.GatewayComponent;

/**
 * 被装饰类
 */
public class BasicComponentGateway extends GatewayComponent {

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

3)定义抽象装饰类

/**
 * 定义抽象装饰类
 */
public class AbstractDecorator extends GatewayComponent {

    public GatewayComponent gatewayComponent;

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

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

4)具体装饰类

import com.demo.AbstractDecorator;
import com.demo.GatewayComponent;

/**
 * 具体装饰类
 */
public class LogDecorator extends AbstractDecorator {

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

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

/**
 * 具体装饰类
 */
public class LimitDecorator extends AbstractDecorator {

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

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

}

5)装饰工厂类

import com.demo.GatewayComponent;
import com.demo.impl.BasicComponentGateway;
import com.demo.impl.LimitDecorator;
import com.demo.impl.LogDecorator;

/**
 * 装饰工厂类
 */
public class FactoryGateway {

    public static GatewayComponent getGatewayComponent() {
        return new LimitDecorator(new LogDecorator(new BasicComponentGateway()));
    }
}

6)测试类

import com.demo.GatewayComponent;
import com.demo.factory.FactoryGateway;

public class Test {

    public static void main(String[] args) {
        GatewayComponent gatewayComponent = FactoryGateway.getGatewayComponent();
        gatewayComponent.service();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值