程式碼執行結果

代碼角色說明
- Element:Component(抽象構件),定義統一介面:Add/Remove/Display/Start/Stop
- GameService:Leaf(葉節點),無子節點,Add/Remove 拋出例外
- GameServer:Composite(樹枝節點),管理服務清單,啟動/停止有順序邏輯
- GameArea:Composite(最上層樹枝),管理伺服器清單
透明 vs 安全模式
| 模式 | 做法 | 優點 | 缺點 |
| 透明模式 | Component 宣告 Add/Remove | Client 統一對待葉/樹枝 | 葉節點執行期拋例外,不安全 |
| 安全模式 | Component 不宣告,僅 Composite 實作 | 型別安全,編譯期檢查 | Client 需區分葉/樹枝,失去透明性 |
本範例採用透明模式,依需求選擇。
GameServer 啟動/停止邏輯亮點
- 啟動:依
ServiceType 排序(大→小),先開 Log/Rank → DataExchange → Gate → Lobby
- 停止:反序關閉
- 樹枝節點封裝複雜管理邏輯,Client 單純呼叫
Start()
Client 使用簡潔性
Element server1 = new GameServer("GS1", "192.168.0.1");
server1.Add(new GameService("Lobby1", 1, "S5Lobby1"));
// ... 加入其他服務
Element area = new GameArea("電信區");
area.Add(server1);
area.Add(server2);
area.Display(); // 遞迴顯示整棵樹
area.Start(); // 一鍵啟動整個大區
area.Stop(); // 一鍵關閉
模式優勢體現
若無 Composite,Client 需手動遍歷伺服器→服務,並處理啟動順序邏輯。模式將「部分-整體」階層操作封裝在樹枝節點,Client 僅對根節點操作。
- 上一篇文章: C# 設計模式實戰:Flyweight 享元模式完整解析(一)
- 下一篇文章: C# 設計模式實戰:Composite 組合模式完整解析(一)
Copyright ©
程式碼之家 All Rights Reserved