单例模式
单例模式算是最简单的一种设计模式,也是 JavaScript 中特别常见一种设计模式。比如创建一个对象var o = {},当对象 o 作为一个全局变量共享时,可以算作一种单例模式。单例模式的核心是确保只有一个实例,并提供全局访问。
实际应用中,对话框等全局唯一的UI组件,会使用到单例模式。以 Dialog 组件为例,我通常会为一个 Dialog 类写一个 getInstance() 的静态方法。代码如下:
var getInstance = function() {   var _instance;   return function() {     if (!_instance) {       _instance = new Dialog();     }     return _instance;   } }
  | 
 
其实就是利用了闭包,将创建的实例缓存了起来,这样保证同一个页面只会存在一个 Dialog 实例。
发布-订阅模式
发布-订阅模式,又称观察者模式。它定义了对象间一种一对多的关系。JavaScript中发布-订阅模式可以说无处不在。比如最常见的事件机制,就是一种发布-订阅模式。下面,我们来实现一个简单的事件机制。
var Event = (function(){   var list = {};   var listen = function(type, fn) {     if (!list[type]) {       list[type] = [];     }      list[type].push(fn);   }   var trigger = function() {     var type = Array.prototype.shift.call(arguments);     var fns = list[type];     if (!fns || !fns.length) {       return false;     }     for (var i = 0; i < fns.length; i++) {       fns[i].apply(this, arguments);     }   }   var remove = function(type, fn) {     var fns = list[type];     if (!fns || !fns.length) {       return false;     }      fns.forEach(function(_fn, i) {       if (_fn == fn) {         fns.splice(i, 1);       }     })   }   return {     listen: listen,     trigger: trigger,     remove: remove   } })();
  Event.listen('click', function(data) {   console.log('you clicked: ' + data); }) Event.trigger('click', 'hahaha');
  | 
 
代理模式
待续…