代碼執行結果
代碼結構說明
- AccountSystem(中介者):統籌同事類互動,內部維護同事物件列表。註冊、儲值、消費方法會遍歷相關同事呼叫其專屬方法,全部完成後才更新自身帳戶。
- GameSystem(抽象同事):儲值/消費各有兩組方法——對外方法僅轉發請求給中介者;
xxxSelf 方法執行實質操作。
- GameArea1/2(具體同事):透過父類建構子關聯中介者。
- 核心特徵:同事主動感知中介者並與之關聯,實際操作僅與中介者通訊,不再直接關聯其他同事。
何時採用
當一組介面相對穩定的對象間依賴關係錯綜複雜、難以維護或可能變動時,可引入中介者模式。(若 GameArea1/2 充值方法定義不一,AccountSystem 將難以統籌。)
實現要點
- C# 中可用
delegate 解耦中介者與同事互動行為。
- 中介者 vs 觀察者:前者適用多對多雜亂互動的統籌;後者適用一(多)對多關係的靈活定製。本例後半階段可套用觀察者模式。前節範例若有多主體多觀察者多對多通訊,也可用中介者統籌。
- 中介者 vs 外觀:前者同事需透過中介者雙向通訊,用於子系統間;後者子系統傾向單向通訊,用於子系統與上層系統。本例兼具兩者影子。
- 架構層面常與觀察者、外觀模式搭配,或退化為其形態。實際應用中得益即可,名稱不重要。
注意事項
- 非所有系統皆需中介者將多對多轉為多對一對多。若同事間關聯清晰無交錯、或不複雜,無需強行套用。
- 實際應用中中介者邏輯可能龐大,隨需求變更難以維護時,可考慮對中介者角色或處理行為套用其他設計模式。