你的位置:首页 > Java教程

[Java教程]Javascript设计模式学习二(单例)


定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点

普通的单例模式:
  使用一个变量来标记当前是否已经为某个类创建过对象,如果是的话,在下一次获取该类的实例时,直接返回之前创建的对象。
比如:使用一个变量instance标记是否创建了这个类对象,现在需要用到一个Single类,先判断instance是否为null,若不是则直接return返回,若是则new Singleton();

var instance = null;return function(){  if(!instance){    instance = new Singleton();  }  return instance;}

JavaScript中,我们经常会把全局变量当成单例来使用,但全局变量容易造成命名空间污染,使用命名空间可以减少全局变量的数量。

我们常在管理命名空间时使用单例模式,它可以降低你在代码中创建全局变量的数量。

 

惰性单例:在需要的时候才创建对象实例。(非常有用)
通用的惰性单例:
  首先是管理单例逻辑封装在getSingle中,创建对象的方法fn被当作参数动态传入

var getSingle = function(fn){  var result;  return function(){    return result || (result = fn.apply(this,arguments));  }};

fn可以是创建弹窗的方法createDialog或者其他方法,传入getSingle后,返回一个新的函数,并且用一个变量result保存fn的结果,因为result在闭包中,所以它永远不会被销毁,如果result已经被赋值,那么它将返回这个值。

var createDialog = function(){  //创建Dialog代码}document.getElementById("btn").onclick = function(){  var dialogLayer = getSingle(createDialog);//这样创建好Dialog了}

把创建实例对象和管理对象分别放置在两个方法里,这两个方法可以独立变化而互不影响,减低耦合。这两个方法组合起来才具有单例模式的神奇作用
这种单例模式的用途不止创建对象,可以用于“一次绑定事件”,还有其他。。