程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 無廢話C#設計模式之十一:Composite(2)

無廢話C#設計模式之十一:Composite(2)

編輯:關於C語言

代碼執行結果如下圖:

代碼說明

l Element類型就是抽象構件的角色,它給組合對象以及單個對象提供了一個一致的接口,使得它們都能有一致的行為。

l 這裡就出現一個問題,組合對象需要通過Add和Remove方法來為其添加子節點,而最底層的樹葉構件下並沒有任何子節點,在接口中定義這些操作子節點方法的方式叫做透明方式的合成模式,缺點就是不夠安全,容易在運行時出現異常。如果把這些操作子節點的方法定義從抽象構件中刪除,由各樹枝構件來實現的話,就是安全方式的合成模式,缺點也就是不夠透明。具體怎麼做還要根據自己的需求。

l GameService當然就是樹葉構件,如果調用它的Add以及Remove方法會拋出一個異常。當然,你也可以以其它方式來記錄這種邏輯錯誤。

l GameServer是一個樹枝構件。一個游戲服務器上會有多個游戲服務。這裡注意到一點,在開啟服務器上所有服務的時候,我們對服務進行了排序,排序是按照服務的類型進行的。然後,我們按照服務類型從大到小的次序開啟了服務。一般一個網絡游戲的服務會有很多種,而這些服務的開啟是有先後次序的,先開記錄日志的服務、排名服務、再開數據交換的服務、最後才是大廳服務等。我們不可能讓用戶進入大廳的時候沒有地方寫數據和日志吧。開啟服務是按照次序的,那麼關閉服務也就是按照相反的次序了。

l 從上面這點,我們就可以看到組合模式的好處了,樹枝構件在管理樹葉構件的時候通常還會有一些邏輯,不會是簡單的增加和刪除操作。如果這些工作交給客戶端去做的話,就太不合理了。

l 最上層的樹枝構件就是GameArea類型。它並沒有什麼特殊的地方。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved