WEB开发网
开发学院网页设计JavaScript 软件设计模式在JavaScript中的应用 阅读

软件设计模式在JavaScript中的应用

 2010-09-14 13:32:10 来源:WEB开发网   
核心提示: function Singleton(){if(Singleton.caller!=Singleton.getInstance){throw new Error(”Can not new Singleton instance!”);}……

function Singleton(){
if(Singleton.caller!=Singleton.getInstance){
throw new Error(”Can not new Singleton instance!”);
}
…………
}

这样当用户试图自己创建多个对象的时候,通过人工抛出异常来阻止。不过这么做你感觉是不是还是有一点别扭?创建单例就创建单例吧,干嘛非要抛出一个异常呢?但无论如何,使用上述方案已经能够实现了仅能创建类的单例的目的。

下面,我们来讨论第三种方法(也是最优秀的方法)。这种方法巧妙利用了JavaScript对于“匿名”函数的支持特征来间接实现禁止对Singleton类构造函数的访问,从而较好地模拟了私有构造函数的特性,最终比较完美地解决了用JavaScript实现Singleton模式的问题。

列表2:借助于“匿名”函数的支持在JavaScript中创建Singleton模式类

<script type="text/javascript">
(function(){
  //SingletonFactory Interface
  SingletonFactory = {
    getInstance : getInstance
  }
  //private classes
  function SingletonObject()
  {
    SingletonObject.prototype.methodA = function()
    {
      alert('methodA');
    }
    SingletonObject.prototype.methodB = function()
    {
      alert('methodB');
    }
    SingletonObject.instance = this;
  } 
  //SingletonFactory implementions
  function getInstance()
  {
    if(SingletonObject.instance == null)
      return new SingletonObject();     
    else
      return SingletonObject.instance;
  }
})();
var instA = null;
try
{
  alert("试图通过new SingletonObject()构造实例!");
  instA = new SingletonObject();
}
catch(e){
  alert("SingletonObject构造函数不能从外部访问,系统抛出了异常!");
}
instA = SingletonFactory.getInstance(); //通过Factory上定义的静态方法获得
var instB = SingletonFactory.getInstance();
instA.methodA();
instB.methodA();
alert(instA == instB); //成功  
</script>

上一页  1 2 3 4 5 6 7 8  下一页

Tags:软件 设计模式 JavaScript

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接