- 装饰模式
- 在不改变原有类的情况下,动态的增强接口功能性。
- 代码实现(例子)
-
/**
* 装饰模式-被装饰抽象类
*/
public abstract class GatewayComponent {
public abstract void service();
}
-------------------------------------------------------------------------------
/**
* 装饰模式-被装饰具体类
*/
public class BasicComponentGateway extends GatewayComponent {
@Override
public void service() {
System.out.println("网关开始获取基本参数信息");
}
}
-----------------------------------------------------------------------------------
/**
* 装饰模式-装饰抽象类
*/
public abstract class AbstractDecorator extends GatewayComponent {
private GatewayComponent gatewayComponent;
public AbstractDecorator(){
}
public AbstractDecorator(GatewayComponent gatewayComponent){
this.gatewayComponent=gatewayComponent;
}
@Override
public void service(){
gatewayComponent.service();
}
public void setGatewayComponent(GatewayComponent gatewayComponent){
if(gatewayComponent!=null){
this.gatewayComponent=gatewayComponent;
}
}
}
-----------------------------------------------------------------------------------------------------------
/**
* 装饰模式-具体装饰类
*/
public class LogDecorator extends AbstractDecorator {
public LogDecorator(){
}
public LogDecorator(GatewayComponent gatewayComponent){
super(gatewayComponent);
}
@Override
public void service(){
super.service();
System.out.println("第二步>>>>日志的采集.....");
}
}
--------------------------------------------------------------------------------------------------------------
/**
* 使用工厂获取装饰诶
*/
public class FactoryGateway {
public static GatewayComponent getGatewayComponent(){
LogDecorator logDecorator=new LogDecorator();
logDecorator.setGatewayComponent(new BasicComponentGateway());
return logDecorator;
}
}
------------------------------------------------------------------------------------------------------------------
@test测试
public static void main(String[] args) {
GatewayComponent gatewayComponent = FactoryGateway.getGatewayComponent();
gatewayComponent.service();
}
在代码中,将被装饰者传给装饰类,具体装饰者通过构造函数将被装饰者赋给装饰抽象类,然后装饰抽象类中重写父类service()方法,通过gatewayComponent.service();就等于调用被装饰者的service()方法,然后具体装饰者继承装饰抽象类,再一次重写就可以实现功能增强。
-
- -------------------------------------------------------------------------------------------------本文参考蚂蚁课堂精讲设计模式系列
09-07