标签:system turn 对象 log 基础 效果 实现 附加 应用
装饰者模式是在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能),
属于结构型模式。
1、用于扩展一个类的功能或者给一个类添加附加职责
2、动态的给一个类添加一个功能,这些功能可以再动态的撤销
(1)抽象组件:定义一个抽象接口,来规范准备附加功能的类
(2)具体组件:将要被附加功能的类,实现抽象构件角色接口
(3)抽象装饰者:持有对具体构件角色的引用并定义与抽象构件角色一致的接口
(4)具体装饰:实现抽象装饰者角色,负责对具体构件添加额外功能。
/**
* 定义一个抽象接口
*/
public abstract class GatewayComponent {
public abstract void service();
}
/**
* 定义一个抽象的装饰者
*/
public abstract class AbstractDecorator extends GatewayComponent{
private GatewayComponent gatewayComponent;
public AbstractDecorator(GatewayComponent gatewayComponent){
this.gatewayComponent = gatewayComponent;
}
@Override
public void service() {
this.gatewayComponent.service();
System.out.println("这个是抽象的装饰着类");
}
}
/**
* 被装饰着
*/
public class BaseGateway extends GatewayComponent{
@Override
public void service() {
System.out.println("被装饰着");
}
}
/**
* 日志装饰着
*/
public class LogDecorator extends AbstractDecorator {
public LogDecorator(GatewayComponent gatewayComponent) {
super(gatewayComponent);
}
@Override
public void service() {
//调用装饰着模式
super.service();
System.out.println("日志收集");
}
}
/**
* 限流
*/
public class LimitDecorator extends AbstractDecorator {
public LimitDecorator(GatewayComponent gatewayComponent) {
super(gatewayComponent);
}
@Override
public void service() {
super.service();
System.out.println("限流操作");
}
}
/**
* 获取工厂数据
*/
public class DecoratorFactory {
public static GatewayComponent getGatewayComponent(){
GatewayComponent gatewayComponent = new BaseGateway();
gatewayComponent = new LogDecorator(gatewayComponent);
gatewayComponent = new LimitDecorator(gatewayComponent);
return gatewayComponent;
}
}
/**
* 测试类
*/
public class Test001 {
public static void main(String[] args) {
GatewayComponent gatewayComponent = DecoratorFactory.getGatewayComponent();
gatewayComponent.service();
}
}
标签:system turn 对象 log 基础 效果 实现 附加 应用
原文地址:https://www.cnblogs.com/cxyyh/p/11444135.html