設計模式之Composite

Composite定義:
       顧名思義,該模式將對象以樹形結構組織起來,以達成「部分-總體」 的層次結構,使得客戶端對單個對象和組合對象的使用具備一致性.
服務器

 

Composite好處:
1.使客戶端調用簡單,客戶端能夠一致的使用組合結構或其中單個對象,用戶就沒必要關係本身處理的是單個對象仍是整個組合結構,這就簡化了客戶端代碼。
2.更容易在組合體內加入對象部件. 客戶端沒必要由於加入了新的對象部件而更改代碼。
ui

 

eg:spa

 

      服務器端菜用繼承方式取得父子類關係以便後面使用。.net

      客戶端代碼 對象

 

Cabinet cabinet=new Cabinet("Tower");

Chassis chassis=new Chassis("PC Chassis");
//將PC Chassis裝到Tower中 (將盤盒裝到箱子裏)
cabinet.add(chassis);
//將一個10GB的硬盤裝到 PC Chassis (將硬盤裝到盤盒裏)
chassis.add(new Disk("10 GB"));

//調用 netPrice()方法;
System.out.println("netPrice="+cabinet.netPrice());
System.out.println("discountPrice="+cabinet.discountPrice());
繼承

 

上面調用的方法netPrice()或discountPrice(),實際上Composite使用Iterator遍歷了整個樹形結構,尋找一樣包含這個方法的對象並實現調用執行.ip

 

Composite模式,在實際應用中,若是碰到樹形結構,就能夠嘗試是否能夠使用這個模式。it

 

在網上拷貝一個Jive的例子:thread

 

Jive解剖
在Jive中 ForumThread是ForumMessages的容器container(組合體).也就是說,ForumThread相似咱們上例中的 CompositeEquipment.它和messages的關係如圖:
[thread]
   |- [message]
   |- [message]
      |- [message]
      |- [message]
         |- [message]
容器

咱們在ForumThread看到以下代碼:

 

相似CompositeEquipment, 提供用於訪問本身組合體內的部件方法: 增長 刪除 遍歷.

相關文章
相關標籤/搜索