• PureMVC(JS版)源码解析(十二):Facade类


        MVC设计模式的核心元素在PureMVC中体现为Model类、View类和Controller类。为了简化程序开发,PureMVC应用Facade模式。
        Facade是ModelViewController三者的"经纪人"。实际编写代码时你并不用导入这三者的类文件,也不用直接使用它们。Facade类已经在构造方法中包含了对核心MVC三者单例的构造。也就是说Facade类应用单例模式,它负责初始化核心层(ModelViewController),并能访问他们的Public方法。

        在实际的应用中,你只需要继承Facade类创建一个具体的Facade类就可以实现整个MVC模式,并不需要在代码中导入编写ModelViewController类。

        关于Facade模式,推荐几篇博客,可以参考一下:

     
     
          我们知道Facade类负责初始化核心类(ModelViewController),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类的思维导图:

  • 相关阅读:
    由@Convert注解引出的jackson对枚举的反序列化规则
    List.contains()与自动拆箱
    Utf-8+Bom编码导致的读取数据部分异常问题
    ResouceUtils.getFile()取不到Jar中资源文件源码小结
    Java自动装箱中的缓存原理
    Javaconfig形式配置Dubbo多注册中心
    logback多环境配置
    Spring @Scheduled @Async联合实现调度任务(2017.11.28更新)
    Nginx的Access日志记录的时机
    Mysql索引引起的死锁
  • 原文地址:https://www.cnblogs.com/iRavior/p/3369049.html
Copyright © 2020-2023  润新知