网络编程
位置:首页>> 网络编程>> 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
投稿

猜你喜欢

  • 最近在内部讨论关于”完美三栏”的话题,看到一篇”In Search of the Holy Grail“,相当的好.故此翻译之.In Sea
  • 在计算机信息技术中,少有象类似 XML 那样的技术,她让人们产生范围很大的联想,而这些联想及其应用又可能相距甚远。她也更多引起人们对 XML
  •     我们可以利用 Cookie collection 来刪除客户端的Cookies: <%
  • 在使用ASP来进行后端的数据合法性校验的时候,有些人为满足不同环境下面的数据校验,编写了很多的函数来实现,比如,我们想要校验用户输入的URL
  • 其实想实现这种功能很简单,首先要上传一个RAR的解压程序,就是RAR自己的解压程序,只需要它的核心程序RAR.EXE这个文件就可以了。然后就
  • 系列一:图片格式介绍Gif格式特点透明性Gif是一种布尔透明类型,既它可以是全透明,也可以是全不透明,但是它并没有半透明(alpha 透明)
  • 内部存储格式:世纪、年、月、日、小时、分钟、秒默认格式是:DD-MON-RR。SYSDATE 返回当前的系统时间。SELECT S
  • sys;//系统管理员,拥有最高权限 system;//本地管理员,次高权限 scott;//普通用户,密码默认为tiger,默认未解锁 s
  • 雅虎的BrowserPlus在曝光了N久后终于发布了,一款类似于Google Gears的浏览器增强插件。在支持的操作系统方面,Gears明
  • 准备软件:1. J2SDK(1.5.0): jdk-1_5_0-linux-i586-rpm.bin2. Apache(2.0.53): h
  • 使用ASP处理XSLT转换XML比较简单,思路如下:创建一个XSLTemplate的对象,再创建一个XMLDOM对象,然后在家Xml文件和X
  • 如何用METADATA替换ADOVBS.INC?     在ASP中,使用组件时,如ADO,得先包含
  • 使用sql语句删除数据库中重复记录的两个方法如下:方法一declare @max integer,@id in
  •   本人就职于一个本地门户网站,每天网站上的天气都得更新。久而久之感到相当麻烦,于是写了一个定时的新闻小偷,帖出来大家参考一下系统
  •  大家都出书,我也很幸运的有了这本书,不过一本书的好与坏,错与对都是在于一个人的理解,web标准这个东西主要还是大家理解,理解的深
  • 1、元旦之前受赵晨之邀作为讨论嘉宾参加了ACM组织的“人与信息社会巡讲”。2、去之前赵晨发给了我大致的讨论提纲。咣当了好几下~说实话,我是硬
  • IFRAME 元素 | iframe 对象创建内嵌浮动框架。成员表下面的表格列出了 iframe 对象引出的成员。请单击左侧的标签来选择你想
  • Jon Wiley, User Experience Designer for Google Apps, outlined some of
  • 程序开始:<% Server.ScriptTimeout = &HE10 '&
  • SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL。其中用于定义数据的结构,比如 创建
手机版 网络编程 asp之家 www.aspxhome.com