pureMVC詳解

[img]http://dl.iteye.com/upload/attachment/520822/58e8d28f-5cd0-32ca-a349-7a2f9eb46ffe.jpg[/img]
[color=red][b]一、pureMVC 內核:[/b][/color]
View、Control、Model,三者都是單例,三者的管理者、協作者是Facade,Facade負責三者之間的通信、映射、註冊、初始化等,Facade也是pureMVC的啓動者。
1、View層(單例):View負責對Mediator的管理;View內部有兩個映射表mediatorMap、observerMap,mediatorMap用來存儲所有的Mediator,observerMap存儲着所有的通信觀察者(Observer,即監聽消息者),在註冊一個Mediator之時View會自動根據Mediator內部的listNotificationInterests返回的需要觀察的通信消息命令頭來創建相應的觀察者並映射到observerMap表中,一個消息頭可以映射多個Observer;另外,在調用 RegisterCommand時也會自動將該Command作爲觀察者映射到該observerMap表中。

2、Control層(單例):Control內部存有所有Command的映射表,負責View和Model之間的邏輯及通信操作,以達到將View 與 Model解耦合,在調用 RegisterCommand時也會自動將該Command作爲觀察者映射到View中的observerMap表中。

3、Model層(單例):Model存儲所有Proxy的映射,Model只與Control通信,並可以被Control直接引用或接受Control發來的消息,Model負責數據模型及遠程調用的操作。
二、四者之間 的關係:
1、View可以發送至Control或接受來自Control的消息,View 不允許直接與 Model通信,兩者之間的通信必須經過Control; View不允許直接通過Facade引用Control來執行代碼,必須通過消息發送;View可以直接被Control通過Facade引用,但官方不支持這種寫法,希望View應該儘量不開放接口;
2、Model不允許向View發送消息,但是可以向Control發送消息,也不允許直接通過Facade引用Control或View來執行代碼,但是Control可以直接通過Facade引用Model來執行代碼;
3、Facade提供了View、Model、Control三者的初始化、註冊、刪除、引用及通信的接口 。

[color=red][b]三、通信:[/b][/color]
1、Observer(觀察者): Observer存儲了正在觀察的對象(即Command或Mediator對象)和對應的執行函數;
2、Notifier包含了sendNotification的接口,Command、Mediator、Proxy都是繼承於Notifier。Notifier中的sendNotification中引用了Facade.sendNotification的接口;
3、Facade 中的sendNotification通過調用notifyObservers接口引用View.notifyObservers接口;
4、View中的notifyObservers實現通信:首先,通過notification.getName()在observerMap查找出對應的觀察者列表;其次,循環遍歷找出的對應觀察者列表,調用觀察者的notifyObserver接口 來執行Observer內部的觀察對象的執行函數。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章