2014/09/10

淺談協調者模式[Mediator Pattern] - 使用 Delphi + Interface

在「深入淺出-設計模式」一書中談到「居間協調者模式」時,把它歸類在不受設計人歡迎的模式中(請參閱:14 附錄:剩下的模式-居間協調者模式)。

只是,它有提到在 MVC 中經常會使用這個模式來設計。看了下它的介紹,就真的是簡短到一個極致。

接著便拿起「參悟物件設計模式 - 使用 Delphi」一書,翻到了「協調者模式」一節。

……還是有點難理解,按本人羸弱的思考能力是這樣解讀的:

  • Mediator 收集所有的元件,並且設計一套劇本。
  • Colleague 做了什麼事都要回報給 Mediator。
於是便有了以下的圖:


使用 Interface 設計上是比 Abstract Class 要來得簡潔,要注意的地方大概是:
  • protected 區域影響子類的使用
  • 為了一致性會讓父類別重載時的 Private 屬性無法浮現,所以要另外繼承父類別來使用


整個依樣畫完葫蘆後,覺得協調者模式的好處是:
  • 分工十分明確,物件間彼此都不知道對方的存在,物件重複利用的可能性大增。

壞處是:
  • Mediator 的程式內容會非常的多,所有流程和物件通通擠在一個 function 裡,隨著專案日漸龐大,function 也會越來越難以維護,還有一堆可能交叉的流程等著釐清……
但若是依照「修改封閉」原則來看,也會有日後繼承樹越來越大支的問題,難怪也是冷門的設計模式之一。(笑)

由於 UI 完全按照書上的範例設計,就不再放執行畫面了
Sample Code Download.

沒有留言:

張貼留言