动态添加对象功能(通过叠加功能组件),可以有效分离性能组件和功能组件,提升模块的可维护性和复用性
具体组件(被装饰者),具体的业务逻辑
装饰者,持有一个具体的被装饰者对象
具体装饰者,实现装饰逻辑,继承自装饰者
具体组件
装饰者
具体装饰者1
具体装饰者2
主函数
主要角色:
组件接口,装饰者和被装饰者的接口,定义了被装饰者的核心功能和装饰者需要加强的功能点具体组件(被装饰者),具体的业务逻辑
装饰者,持有一个具体的被装饰者对象
具体装饰者,实现装饰逻辑,继承自装饰者
UML图见书P28
例子:
组件接口public interface IPacketCreator{
public String handle();
}
具体组件
public class PBCreator implements IPacketCreator{
@Override
public String handle(){
return "hello world";
}
}
装饰者
public abstract class PDecorator implements IPacketCreator{
IPacketCreator component;
public PDecorator(IPacketCreator c){
this.component =c;
}
}
具体装饰者1
public class PHCreator extends PDecorator{
public PHCreator(IPacketCreator c){
super(c);
}
@Override
public String handle(){
StringBuilder sb = new StringBuilder();
sb.append("HHHHH");
sb.append(component.handle());
sb.append("HHHHH");
return sb.toString();
}
}
具体装饰者2
public class PHCreator2 extends PDecorator{
public PHCreator2(IPacketCreator c){
super(c);
}
@Override
public String handle(){
StringBuilder sb = new StringBuilder();
sb.append("22222222");
sb.append(component.handle());
sb.append("22222222");
return sb.toString();
}
}
主函数
public class Main{
public static void main(String[] args){
IPacketCreator ipc = new PHCreator2(new PHCreator(new PBCreator()));
System.out.println(ipc.handle());
}
}