2.1.4 裝飾者模式

動態添加對象功能(通過疊加功能組件),可以有效分離性能組件和功能組件,提升模塊的可維護性和複用性

主要角色:

組件接口,裝飾者和被裝飾者的接口,定義了被裝飾者的核心功能和裝飾者需要加強的功能點
具體組件(被裝飾者),具體的業務邏輯
裝飾者,持有一個具體的被裝飾者對象
具體裝飾者,實現裝飾邏輯,繼承自裝飾者

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());
     }
}


發佈了42 篇原創文章 · 獲贊 10 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章