zoukankan      html  css  js  c++  java
  • [设计模式]单体模式

    Javascript中的单体模式是常用的模式,也是最基本的一种模式。先说说有哪些优点,当然不止有两个优点,呵呵。
    通常我们定义的函数或变量都会是在全局里,当然,把变量写在函数里并用var去定义的话,固然这个变量的作用域是在这个函数里面。
    单体模式的优点是:
    1、可以减少变量冲突,当然闭包也可以实现这点。
    2、把功能代码都组织在一起,方便阅读和维护。
    3、可以有更好的分支处理。

    下面先来一段单体模式代码

    //这是一个单体模式示例,就拿近期的项目来说明
    //
    呵呵,看下面的变量名,认识我的人,都知道是哪个项目啦。那项目就是用了单体模式。
    var XZB = {
    namespace:function(){

    },
    copyText:function(){

    },
    method1:function(){
    }

    ....
    }

    这样XZB对象下面的变量就不会和全局变量发生冲突了,可以通过XZB[method1]来访问里面的方法。
    也许有人问,var XZB这个不是在全局变量吗?不怕有冲突吗?呵呵,当然,这个唯一的保护层是很坚固,但也是很脆弱的。
    所以在全局定义XZB之前,要判断一下全局有木有同名变量。

    if(typeof XZB == "undefined") XZB = {};

    单体模式里面的方法都是公有的,也就是说,可以通过XZB[method1]来访问里面的method1的方法。
    但也有缺点,就是可以通过XZB[method1]=null 来KO一个方法,呵呵。
    那么,有木有方法可以做到只公开一小部分方法呢?有,就是用闭包的方法:

    var XZB = (function(){
    var G = 10;
    var Return = {
    getG:function(){
    return G;
    },
    setG:function(g){
    G = g;
    }
    }
    return Return;
    })();

    这样通过闭包自执行返回一个可公开的方法,这样只能访问和修改公开的变量了,即里面的getG和setG。
    测试一下:

    console.log(XZB.getG());  //10
    XZB.setG(15);
    console.log(XZB.getG()); //15
    console.log(XZB.G) //G是闭包里面的私有变量,无法访问。


    引:
    如果先有以下:

    var XZB = {
    a:"123"
    }

    如果想要再加一个b:"456",

    //往XZB追加b
    XZB.b = "456";

    console.log(XZB); //XZB = {a:"123",b:"456"}

    注意以下的写法是错误的

    //以下是错误的写法
    XZB = {b:"456"}

    console.log(XZB.a) //undefiend

    因为这样就会给XZB重新开辟一个新的内存空间,也就是说,之前的a:"123"木有了。

    一般在单体模式中按功能划分,比如:

    var XZB = {
    arrayMethod:{
    indexOf:function(i){//获取数组元素索引},
    getEle:function(i){//获取指定索引的元素}
    },
    stringMethod:{
    sliceString:function(m,n){//截取某字符串},
    stringLen:function(string){//返回字符串长度}
    }
    }






  • 相关阅读:
    服务器端事件发送SSE
    Mybatis generator代码生成
    如何靠谱地查到Tomcat的版本
    java自动生成代码
    Java读取excel(兼容03和07格式)
    常见的NoSQL数据库
    任务五 通用类问题相关度计算实现
    任务四 娱乐相关节目和娱乐人物关系代码整理
    任务三 非人物分析判断
    任务二 人物类与娱乐类关联优化分析
  • 原文地址:https://www.cnblogs.com/zzbo/p/2349588.html
Copyright © 2011-2022 走看看