技术开发 频道

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

  【IT168 专稿】

  1.简介

  在Ajax技术出现之前,传统的Web应用中JavaScript代码所占的比例较少,并且大多数情况下都是采用面向过程的编程方式,真正将JavaScript作为一门高级语言进行正式编程的开发人员也很少。而目前富客户端的Web应用开发已经成为大势所趋,JavaScript在Web应用中所占的比例会越来越大。如何有效地实现代码的复用以及灵活应对需求的变化已经正式列入JavaScript程序员必须探讨的议事日程。

  GoF的《Design Patterns:Elements of Reusable Object-Oriented Software》一书成为当代程序员研究设计模式的典范与开山之作。然而,目前针对设计模式的探讨主要停留在以Java与C#等强类型高级语言方面,那么,对于像JavaScript这样的弱类型语言是否也适用设计模式呢?答案是肯定的。在本文中,我将通过几个简短的示例来向你展示如何把设计模式应用于像JavaScript这样的弱类型语言的编程之中。

  2.Singleton模式(亦称“单例模式”)
 
  (1)概念
  Singleton模式作为一种非常基本和重要的创建型模式,其职责是保证一个类有且只有一个实例,并提供一个访问它的全局访问点。

  在程序设计过程中,有很多情况下需要确保一个类只能有一个实例。传统的编程语言中为了使一个类只有一个实例,最容易的方法是在类中嵌入静态变量,并在第一个实例中设置该变量,而且每次进入构造函数都要做检查,不管类有多少个实例,静态变量只能有一个实例。为了防止类被多次初始化,需要把构造函数声明为私有类型,这样便只能在静态方法里创建一个实例。

  在JavaScript中,虽然我们仍然可以指定静态方法来构造对象,但由于我们不能利用构造函数的“私有”来禁止多个实例的生成,因此要完全实现Singleton并没有想象中那么简单。

  (2)举例
  假设有一个作为工具类使用的对象,它不包含任何业务逻辑,也不包含任何需要改变的数据。使用这样的对象时不需要每次都进行实例化,只需要存在一个全局的对象供调用即可。

  根据刚才的分析,我们就可以在JavaScript中通过如列表1所示的方式实现Singleton模式。模式可以保证一个类仅有一个实例,并且提供一个访问它的全局访问点。

  列表1:在JavaScript中创建Singleton模式类

function Singleton(){
this.property1=”hello”;
this.methodl=function(x,y){
return x+y;
}
//定义一个静态属性
Singleton._instance_=null
Singleton.getInstance
=function(){
if(this._instance_==null){
//如果Singleton实例不存在,则进行实例化
this._instance_=new Singleton();
}
//返到Singleton的对象实例
return this._instance_;
};

上面的getInstance方法首先判断静态属性Singleton._instance_是否为null;如果为null,则新建一个Singleton类的对象,保存在Singleton._instance_,最后返回Singleton._instance_属性。
至于Singleton类的使用方法则很简单:

var instA =Singleton.getInstance();  //返回Singleton类的唯一实例
0
相关文章