一、pureMVC 内核:
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三者的初始化、注册、删除、引用及通信的接口 。
三、通信:
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内部的观察对象的执行函数。
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三者的初始化、注册、删除、引用及通信的接口 。
三、通信:
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内部的观察对象的执行函数。