下圖是它的UML設計,可以看到,設計是遵循MVC設計模式;毫無疑問,UIController類是一個控制器(Controller),ModelFacade充當的是模型(Model),它使用了Facade(門面)模式。
- 關於門面模式,門面模式要求一個子系統的外部與其內部的通信必須通過一個統一的門面(Facade)對象進行;使用時機,爲複雜的系統提供一個簡單的接口、子系統的獨立性、層次化結構。
那麼RemoteModelProxy、SynchronizationAgent、LocalModel這三者又分別代表什麼呢?
很奇怪,sun的代碼沒有註釋,也沒有java doc
首先來看LocalModel
它保存着對RMSAdapter、Preferences、ProgressObserver的引用,看起來,它負責對手機RMS數據的管理,所以處於Model;
其中RMSAdapter採用了適配器(Adapter)模式。
- 關於適配器模式,是把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。Adapter其實是中文變壓器的意思。
RMSCacheHandler中存在一個對於RMSAdapter的引用, 再看看RMSCacheHandler是做什麼的?
從名字上看,是控制RMS緩存的,凡是涉及到操作RMS,都用到了適配器模式RMSAdapter。
從UML上來看,RMSCacheHandler其實是和RemoteModelProxy相關的,RemoteModelProxy中有一個對抽象類RemoteModelRequestHandle的引用,而RMSCacheHandler繼承自RemoteModelRequestHandle。