public abstract class AbstractGatewayComponent {
/**
* 系统网关统一入口
*/
public abstract void service();
}
6.2定义被装饰角色
@Component
public class BasicGatewayComponent extends AbstractGatewayComponent {
@Override
public void service() {
System.out.println("1 first get request and response");
}
}
6.3定义抽象装饰角色
@Component
public abstract class AbstractDecorator extends AbstractGatewayComponent {
protected AbstractGatewayComponent gatewayComponent;
@Override
public void service() {
gatewayComponent.service();
}
public AbstractDecorator(AbstractGatewayComponent gatewayComponent) {
this.gatewayComponent = gatewayComponent;
}
public AbstractDecorator() {
}
/**
* 设置执行装饰者
*
* @param gatewayComponent
*/
public void setGatewayComponent(AbstractGatewayComponent gatewayComponent) {
if (null != gatewayComponent) {
this.gatewayComponent = gatewayComponent;
}
}
}
6.4定义具体装饰角色
6.4.1LimitDecorator限流操作类
@Component
public class LimitDecorator extends AbstractDecorator {
public LimitDecorator() {
}
public LimitDecorator(AbstractGatewayComponent gatewayComponent) {
super(gatewayComponent);
}
@Override
public void service() {
super.service();
System.out.println("3执行限流操作");
}
}
6.4.2LogDecorator日志操作类
@Component
public class LogDecorator extends AbstractDecorator {
public LogDecorator(AbstractGatewayComponent gatewayComponent) {
super(gatewayComponent);
}
public LogDecorator() {
}
@Override
public void service() {
super.service();
System.out.println("2统一网关日志打印");
}
}
6.5装饰者工厂
public class DecoratorFactory {
/**
* 通过工厂设置装饰者执行流程,装饰者都是通过最后需要执行的装饰者向上查询需要执行的类
*
* @return
*/
public static AbstractGatewayComponent getGatewayComponent() {
/* LimitDecorator limitDecorator = new LimitDecorator();
LogDecorator logDecorator = new LogDecorator();
limitDecorator.setGatewayComponent(logDecorator);
BasicGatewayComponent basicGatewayComponent = new BasicGatewayComponent();
logDecorator.setGatewayComponent(basicGatewayComponent);
return limitDecorator;*/
return new LimitDecorator(new LogDecorator(new BasicGatewayComponent()));
}
public static void main(String[] args) {
AbstractGatewayComponent gatewayComponent = DecoratorFactory.getGatewayComponent();
gatewayComponent.service();
}
}