zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    ubuntu>雷鸟只能收邮件不能发邮件
    ubuntu>安装jdk(转)
    ubuntu>修改root密码
    ios>Could not instantiate class named NSLayoutConstraint(转)
    ios>xcode4.5 如何找到以前的iphone模拟器(转)
    Windows7系统开始菜单改成经典样式
    ASP.NET多语言版的开发
    Dynamic repositories in LightSpeed
    Enhancing queries in dynamic repositories
    C# 4.0 Dynamic关键字全解析
  • 原文地址:https://www.cnblogs.com/Lin-Yi/p/7455525.html
Copyright © 2011-2022 走看看