Gitlib Gitlib
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)

Ravior

以梦为马,莫负韶华
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)
  • PHP

  • Golang

  • Python

  • Javascript

    • PureMVC

      • PureMVC(JS版)源码解析:认识PureMVC
      • PureMVC(JS版)源码解析01:观察者模式解析
      • PureMVC(JS版)源码解析02:Notification类
      • PureMVC(JS版)源码解析03:Observer类
      • PureMVC(JS版)源码解析04:Notifier类
      • PureMVC(JS版)源码解析05:SimpleCommand类
      • PureMVC(JS版)源码解析06:MacroCommand类
      • PureMVC(JS版)源码解析07:Mediator类
      • PureMVC(JS版)源码解析08:Proxy类
      • PureMVC(JS版)源码解析09:View类
      • PureMVC(JS版)源码解析10:Controller类
      • PureMVC(JS版)源码解析11:Model类
      • PureMVC(JS版)源码解析12:Facade类
      • PureMVC(JS版)源码解析:总结
    • 从一个基础Javascript面试题谈起
    • Javascript垃圾回收机制
    • Javascript实现双向数据绑定
    • 浏览器渲染网页过程
    • 浏览器资源缓存机制总结
  • 其他语言

  • 编程语言
  • Javascript
  • PureMVC
Ravior
2013-10-14

PureMVC(JS版)源码解析12:Facade类

PureMVC

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模式,推荐几篇博客,可以参考一下:

  • http://www.cnblogs.com/zhenyulu/articles/55992.html (opens new window)
  • http://www.cnblogs.com/zhenyulu/articles/55992.html (opens new window)

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();
};

1
2
3
4
5
6
7
8
9
10
11
12

同样,类似于三个核心类,可以通过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];
};

1
2
3
4
5
6
7
8
9
10
11
12
13

Facade类的够着函数有两个方法我们去看看:

Facade.prototype.initializeNotifier = function(key)
{
    this.multitonKey = key;
};

1
2
3
4
5

这个方法主要是存储当前的key值,通过这个key值我们可以初始化三大核心类。

我们在看看Facade初始化三大核心类是在inititeFacade()方法:

Facade.prototype.initializeFacade = function()
{
    //初始化Model
    this.initializeModel();
    //初始化Controller
    this.initializeController();
    //初始化view
    this.initializeView();
};

1
2
3
4
5
6
7
8
9
10

实例化者三个核心类的过程是类似的,以实例化一个Model对象为例:

Facade.prototype.initializeModel = function()
{
    if(this.model != null)
        return;

    this.model = Model.getInstance(this.multitonKey);
};

1
2
3
4
5
6
7
8

因为Facade的很多方法都是调用三大核心的公共接口,就不对Facade的方法一一讲分解。到此,PureMVC的所有类都分析完了。

#PureMVC
上次更新: 2022/12/01, 11:09:34
PureMVC(JS版)源码解析11:Model类
PureMVC(JS版)源码解析:总结

← PureMVC(JS版)源码解析11:Model类 PureMVC(JS版)源码解析:总结→

最近更新
01
常用游戏反外挂技术总结
11-27
02
Golang开发实践万字总结
11-11
03
Redis万字总结
10-30
更多文章>
Theme by Vdoing | Copyright © 2011-2022 Ravior | 粤ICP备17060229号-3 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式