网络编程
位置:首页>> 网络编程>> JavaScript>> 小议javascript设计模式(2)

小议javascript设计模式(2)

作者:oldfish 来源:alipay UED 发布时间:2009-10-09 13:31:00 

标签:设计模式,JavaScript,接口,组合模式

Javascript设计模式之单体模式Singleton

单体模式Singleton:这是最基础的设计模式,严格来说没什么模式可言,但是却很容易用也很好用,支付宝很多组件都是通过单体模式设计的。事实上在《浅谈javascript面向对象编程》中阐述原型继承的时候就已经用到了该模式,这里简单带过,重点说一下惰性单体,这对一些不是所有用户都需要,在特定情景下才会用到的组件有非常好的优化作用,他可以让组件的实例化推迟到用户触发他的时候。

var ioldfish = { 
      name:'老鱼', 
      age:27, 
      getName:function(){ 
        alert(name);  
      }, 
      getAge:function(){ 
        alert(age);  
      } 
    }

上例是一个最简单的单体模式,把本人的资料都整合到ioldfish这个对象字面量中,形成一个模块,同时起到了一个命名空间的作用。

var ioldfish =(function(){ 
      var name = '老鱼'; 
      var age = 27; 
      return{ 
        getName:function(){ 
          alert(name);    
        }, 
        getAge:function(){ 
          alert(age);    
        } 
      } 
    })();

对第一个单体做简单的修改,通过闭包让name,age成为静态私有变量,确保实例化的时候在内存中始终只有一份,这样更符合单体模式的定义。

下面重点介绍一下惰性单体,废话少说,先看看我们该如何来实现惰性单体:

var ioldfish = (function(){ 
      var uniqueInstance; 
      var name = '老鱼'; 
      var age = 27; 
      function constructor(){ 
         return{ 
          getName:function(){ 
            alert(name);  
          }, 
          getAge:function(){ 
            alert(age);  
          } 
         } 
      }    
      return{ 
        isInstance:function(){ 
          if(uniqueInstance == null){ 
            uniqueInstance = constructor(); 
          } 
          return uniqueInstance; 
        } 
      }        
    })(); 
    ioldfish.isInstance().getName();

上面的结构公私分明一目了然,私有变量uniqueInstance(标识类是否已经实例化)和私有方法constructor,返回一个公有方法isInstance(通过该方法可以调用私有方法constructor中定义的方法),形如:ioldfish.isInstance().getName();先通过isInstance()方法判断其是否被实例化,然后通过getName()方法获取到闭包内的私有变量name。该模式的应用场景还是很多的,是不是遇

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com