繼承與組合(表驅動)


考慮一個事件驅動的模塊,這個模塊管理很多個用戶,每個用戶需要處理很多的事件。那麼,我們建立的驅動表就不是針對模塊了,而是針對用戶,應該是用戶在某狀態下,收到某模塊的某事件的處理。我們再假設用戶可以分爲不同的級別,每個級別對上面的提到的處理又不盡相同。
用面向對象的思路,我們可以考慮設計一個用戶的基類,實現相同事件的處理方法;根據級別不同,定義幾個不同的子類,繼承公共的處理,再分別實現不同的處理。這是最常見的一種思路,可以叫它繼承法。
如果用表驅動法怎麼實現?直接設計一個用戶的類,沒有子類,也沒有具體的事件的處理方法。它有一個成員,就是一個驅動表,它收到事件後,全部委託給這個驅動表去進行處理。針對用戶的級別不同,可以定義多個不同的驅動表來裝配不同的對象實例。這個可以叫他組合法。
繼承和組合在《設計模式》也有提到。組合的優勢在於它的可擴展性,彈性,強調封裝性。(繼承和組合可以參考這篇文章:面向對象之繼承組合淺談

至於這種情況下的驅動表,可以繼續使用結構體,也可以使用對象。


reference:

http://blog.csdn.net/chgaowei/article/details/6966857 

http://www.cnblogs.com/whitewolf/archive/2010/05/03/1726519.html (優先使用對象組合,而不是繼承”:並不是說什麼都設計都用組合,只是優先考慮組合,更不是說繼承就是不好的設計)


發佈了72 篇原創文章 · 獲贊 7 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章