解析觀察者模式在安卓程序中的應用——如何實現跨界面Handler通訊
這裏特使用了github中的一個項目作為例子進行解析,地址為:https://github.com/LiqiNew/HandlerFrame/tree/master/handlerFrame/src/main/java/com/liqi/handler
本例子針對安卓程序實現了跨界面的Handler通訊。傳統來說,安卓程序中的Handler是只能在一個界面類中運行的,並不能讓他存在於其他的界面類,但在這個項目中,"只要在HandlerFrame裏面訂閱過的對象,在任何界面都可以發送信息去跟訂閱對象通訊"。其使用了觀察者模式來設計一個新的框架,類圖如下所示:
按照觀察者模式的定義,上圖中的BaseHandler為觀察者,而BaseHandlerOperate為被觀察者。其中BaseHandlerOperate作為被觀察者,其工作是將BaseHandler收入訂閱者隊列並對觀察者進行管理,包括刪除和信息通知。在BaseHandlerOperate中,onSubscribe負責將觀察者綁定在訂閱者隊列中,而sendMessage負責向觀察者傳遞消息,removeFactoryKeyData則負責按照鍵值取消訂閱,也可以用removeAllFactoryData將所有的訂閱都刪除。另外,在這個例子裏也使用了工廠模式。BaseHandler在訂閱之前需要經過BaseHandlerFactoryId進行預處理,生成符合規範的鍵值對後才可加入訂閱。
在這樣的設計之下,Handler與收發信息的控件之間不僅形成了松耦合的關系,還實現了跨界面的通信,大大便利了安卓程序內信息的流通,同時避免了生成過多Handler所造成的內存負擔。
解析觀察者模式在安卓程序中的應用——如何實現跨界面Handler通訊