SmartTicket代碼閱讀筆記(一)

SmartTicket是sun的一個blueprint項目,我想通過學習它的設計,來提高自己的設計、編碼水平。歡迎大家一起學習、或者提供好的建議:)

下圖是它的UML設計,可以看到,設計是遵循MVC設計模式;毫無疑問,UIController類是一個控制器(Controller),ModelFacade充當的是模型(Model),它使用了Facade(門面)模式。

  • 關於門面模式,門面模式要求一個子系統的外部與其內部的通信必須通過一個統一的門面(Facade)對象進行;使用時機,爲複雜的系統提供一個簡單的接口、子系統的獨立性、層次化結構。
ModelFacade充當了與RemoteModelProxy、SynchronizationAgent、LocalModel打交道的門面(Facade),所以它保存着對其他三個對象的引用。

那麼RemoteModelProxy、SynchronizationAgent、LocalModel這三者又分別代表什麼呢?
很奇怪,sun的代碼沒有註釋,也沒有java doc

首先來看LocalModel
它保存着對RMSAdapter、Preferences、ProgressObserver的引用,看起來,它負責對手機RMS數據的管理,所以處於Model;
其中RMSAdapter採用了適配器(Adapter)模式。
  • 關於適配器模式,是把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。Adapter其實是中文變壓器的意思。
所以,RMSAdapter就充當了一種適配器,提供了多種方法來操作RMS數據。

RMSCacheHandler中存在一個對於RMSAdapter的引用, 再看看RMSCacheHandler是做什麼的?
從名字上看,是控制RMS緩存的,凡是涉及到操作RMS,都用到了適配器模式RMSAdapter。
從UML上來看,RMSCacheHandler其實是和RemoteModelProxy相關的,RemoteModelProxy中有一個對抽象類RemoteModelRequestHandle的引用,而RMSCacheHandler繼承自RemoteModelRequestHandle。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章