PureMVC(JS版)源码解析(十二):Facade类
2013-10-14 19:43
417 查看
MVC设计模式的核心元素在PureMVC中体现为Model类、View类和Controller类。为了简化程序开发,PureMVC应用Facade模式。
Facade是Model\View\Controller三者的"经纪人"。实际编写代码时你并不用导入这三者的类文件,也不用直接使用它们。Facade类已经在构造方法中包含了对核心MVC三者单例的构造。也就是说Facade类应用单例模式,它负责初始化核心层(Model\View\Controller),并能访问他们的Public方法。
在实际的应用中,你只需要继承Facade类创建一个具体的Facade类就可以实现整个MVC模式,并不需要在代码中导入编写Model\View\Controller类。
关于Facade模式,推荐几篇博客,可以参考一下:
1、http://www.cnblogs.com/zhenyulu/articles/55992.html
2、/article/1392109.html
我们知道Facade类负责初始化核心类(Model\View\Controller),Facade类和三个核心类一样那个都是多例类,可以通过为的key值获取唯一的实例类。
我们先看一下,Facade类的构造函数:
同样,类似于三个核心类,可以通过getInstance()方法获得单例对象:
Facade类的够着函数有两个方法我们去看看:
这个方法主要是存储当前的key值,通过这个key值我们可以初始化三大核心类。
我们在看看facade初始化三大核心类是在inititeFacade()方法:
实例化者三个核心类的过程是类似的,我们以实例化一个Model对象为例:
因为Facade的很多方法都是调用三大核心的公共接口,就不对Facade的方法一一讲解。到此,PureMVC的所有类都讲解完了,最后附一张Facade类的思维导图:
Facade是Model\View\Controller三者的"经纪人"。实际编写代码时你并不用导入这三者的类文件,也不用直接使用它们。Facade类已经在构造方法中包含了对核心MVC三者单例的构造。也就是说Facade类应用单例模式,它负责初始化核心层(Model\View\Controller),并能访问他们的Public方法。
在实际的应用中,你只需要继承Facade类创建一个具体的Facade类就可以实现整个MVC模式,并不需要在代码中导入编写Model\View\Controller类。
关于Facade模式,推荐几篇博客,可以参考一下:
1、http://www.cnblogs.com/zhenyulu/articles/55992.html
2、/article/1392109.html
我们知道Facade类负责初始化核心类(Model\View\Controller),Facade类和三个核心类一样那个都是多例类,可以通过为的key值获取唯一的实例类。
我们先看一下,Facade类的构造函数:
function Facade(key) { if(Facade.instanceMap[key] != null) { throw new Error(Facade.MULTITON_MSG); } this.initializeNotifier(key); Facade.instanceMap[key] = this; this.initializeFacade(); };
同样,类似于三个核心类,可以通过getInstance()方法获得单例对象:
Facade.getInstance = function(key) { if (null == key) return null; if(Facade.instanceMap[key] == null) { Facade.instanceMap[key] = new Facade(key); } return Facade.instanceMap[key]; };
Facade类的够着函数有两个方法我们去看看:
Facade.prototype.initializeNotifier = function(key) { this.multitonKey = key; };
这个方法主要是存储当前的key值,通过这个key值我们可以初始化三大核心类。
我们在看看facade初始化三大核心类是在inititeFacade()方法:
Facade.prototype.initializeFacade = function() { //初始化Model this.initializeModel(); //初始化Controller this.initializeController(); //初始化view this.initializeView(); };
实例化者三个核心类的过程是类似的,我们以实例化一个Model对象为例:
Facade.prototype.initializeModel = function() { if(this.model != null) return; this.model = Model.getInstance(this.multitonKey); };
因为Facade的很多方法都是调用三大核心的公共接口,就不对Facade的方法一一讲解。到此,PureMVC的所有类都讲解完了,最后附一张Facade类的思维导图:
![](http://images.cnitblog.com/blog/474059/201310/14194102-8dc80a3bde86468ea1e4cd53999baa65.png)
相关文章推荐
- PureMVC(JS版)源码解析
- PureMVC(JS版)源码解析(八):Proxy类
- PureMVC(JS版)源码解析(九):View类
- PureMVC(JS版)源码解析(十):Controller类
- PureMVC(JS版)源码解析(三):Observer类
- PureMVC(JS版)源码解析(四):Notifier类
- PureMVC(JS版)源码解析(六):MacroCommand类
- PureMVC(JS版)源码解析(十一):Model类
- PureMVC(JS版)源码解析(七):Mediator类
- PureMVC(JS版)源码解析:总结
- PureMVC(JS版)源码解析(一):观察者模式解析
- PureMVC(JS版)源码解析(五):SimpleCommand类
- PureMVC(JS版)源码解析(二):Notification类
- CI框架源码解析十二之输入类文件Input.php
- Native JsBridge源码解析 深入理解JsBridge
- Vue.js解析(三)【从Vue.js源码角度再看数据绑定】
- MyBatis源码解析(十二)——binding绑定模块之MapperRegisty
- Android设计模式源码解析之外观模式(Facade)
- (十二)洞悉linux下的Netfilter&iptables:iptables命令行工具源码解析【下】
- Vue源码学习之初始化模块init.js解析