JavaScript中的单体模式四种实现方式

Posted 稀里糊涂林老冷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript中的单体模式四种实现方式相关的知识,希望对你有一定的参考价值。

 

  1 /*
  2     1 简单单体
  3 */
  4 var Singleton = {
  5     attr1: 1 ,
  6     method1:function(){
  7         //do sth
  8     }
  9 };
 10 alert(Singleton.attr1);
 11 Singleton.method1();
 12 
 13 //单体模式一般用于划分命名空间 也就是区分是哪位开发人员的代码 例如
 14 //张三工程师开发的代码
 15 var Zhangsan = { };
 16 //把张三的逻辑写在这里面
 17 Zhangsan.Singleton = {
 18     attr1:1,
 19     method1:function(){
 20         //do sth
 21     }
 22 };
 23 
 24 
 25 
 26 
 27 /*
 28     2  闭包单体: 闭包主要的目的是保护私有变量数据
 29 */
 30 // 命名空间
 31 var Zhangsan = {};
 32 Zhangsan.Singleton = ( function(){
 33     //私有变量和方法
 34     var a = 1;
 35     function f(){
 36         //do sth
 37     }
 38     //返回单体对象
 39     return {
 40         attr1: a,
 41         method1:function(){
 42             return f();
 43         }
 44     };
 45 })();
 46 alert(Zhangsan.Singleton.attr1);
 47 Zhangsan.Singleton.method1();
 48 
 49 /*
 50     3 惰性单体:(和闭包单体有相似的地方)
 51 */
 52 
 53 var Zhangsan = {};
 54 Zhangsan.Singleton = (function(){
 55     //私有变量 控制返回的单体对象
 56     var uniqInstance;
 57     //初始化方法,控制返回的单体中有哪些东西
 58     function init(){
 59         //私有变量
 60         var a = 10;
 61         var fn = function(){
 62             alert("fn");
 63         };
 64         return {
 65             attr : a,
 66             method : fn
 67         };
 68     }
 69     
 70     return {
 71         getInstance:function(){    //如果有单体 则返回 否则创建一个返回
 72             if(!uniqInstance){    //如果不存在
 73                 uniqInstance = init();
 74             }
 75             return uniqInstance;
 76         }
 77     };
 78 })();
 79 
 80 //调用惰性单体
 81 alert(Zhangsan.Singleton.getInstance().attr);    //10
 82 Zhangsan.Singleton.getInstance().method();        //fn
 83 
 84 
 85 
 86 /*
 87     4 分支单体:判断程序分支 浏览器的差异检测
 88 */
 89 var Zhangsan ={};
 90 var different = true;    //用于标记不同的浏览器
 91 Zhangsan.Singleton = (function(){
 92     var objA = {    //a浏览器的内部配置
 93         //属性、方法等
 94         attr:"a",
 95         method : function(){
 96             alert("fn");
 97         }
 98     };
 99     var objB = {    //b浏览器的内部配置
100         //属性、方法等
101     };
102     return (different) ? objA:objB;    //根据不同的浏览器 返回不同的对象
103 })();
104 
105 alert(Zhangsan.Singleton.attr);    //a

 

以上是关于JavaScript中的单体模式四种实现方式的主要内容,如果未能解决你的问题,请参考以下文章

javascript --- 设计模式之单体模式

单体模式

js设计模式--单体模式

js设计模式有哪几种

javascript --- 设计模式之单体模式

swift实现单例的四种方式