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。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章