JS的四种单体模式

又来更新了,今天来分享我昨天学习到的四种单体模式, 废话不多说,直接看看下面代码

简单单体模式

// 1.简单单体模式
    // var Singleton={  //这种模式不能再用new创建实例了,就是Singleton
    //         attr1:true,
    //         attr2:10,
    //         method1:function(){
    //             alert('方法1')
    //         },
    //         method2:function(){
    //             alert('方法2')
    //         },
    // };  
    // // 直接调用 不能再去实例
    // alert(Singleton.attr1);

    // 补充 :划分命名空间 开发人员一般这样写简单单体模式
    // var ZLJ={}; //创建一个最顶层的空间,把自己的代码都放进里面,可以区分其他程序员的代码
    // ZLJ.Singleton={   //这里只是一个对象
    //         attr1:true,
    //         attr2:10,
    //         method1:function(){
    //             alert('方法1')
    //         },
    //         method2:function(){
    //             alert('方法2')
    //         },
    // };
    // // 调用
    // alert(ZLJ.Singleton.attr2);

借用闭包创建单体模式

  // 2.借用闭包创建单体:闭包的主要目的 保护数据
    // 闭包   (function(){}) (); 就是把一个函数放进一个()括号里,后面再加一个()表示执行
    // 这种形式只要脚本一运行,这个函数就会自动执行 这就是一个最简单的闭包  块级作用域的概念
  
//   创建一个属于自己的空间  最顶层的
//          var ZLJ={};
//          ZLJ.Singleton=(function(){   //这里是一个函数
//  // 闭包主要的目的:在这里可添加一些自己的私有成员,不被外面访问,只有通过return出口才能访问到
//               var a1=true;  //语句用分号结尾
//               var a2=10;
//               var f1=function(){
//                   alert('f1');
//               };
//               var f2=function(){
//                   alert('f2');
//               };
               
//             //    把块级作用域的执行结果付给我的单体对象 通过return返回去
//               return {  //这里放的是公有变量,方法
//                   attr1:true,      
//                   attr2:10,
//                   method1:function(){
//                         return f1();  //f1()是私有方法 这里是通过return才能访问
//                    },
//                  method2:function(){
//                         return f2();
//                  },

//               };
//           })();
//         //   调用
//         alert(ZLJ.Singleton.attr1);
//         ZLJ.Singleton.method1();

惰性单体模式

  //  3.惰性单体模式(和闭包单体模式有一些相似的地方)
            // 命名空间
            // var ZLJ={};
            // ZLJ.Singleton=(function(){
            //     // 私有变量  控制要不要返回单体对象 或者返回哪些单体对象
            //     var uniqInterstance ;  //没有赋值 就是 undefined
            //     // 定义一个私有构造器init :初始化单体对象的方法
            //     function init(){
            //         // 私有变量
            //         var a1=true;  //语句用分号结尾
            //         var a2=10;
            //         var f1=function(){
            //            alert('f1');
            //          };
            //         var f2=function(){
            //           alert('f2');
            //          };
            //          return{
            //             attr1:true,      
            //             attr2:10,
            //            method1:function(){
            //                return f1();  //f1()是私有方法 这里是通过return才能访问
            //            },
            //            method2:function(){
            //                 return f2();
            //             },
  
            //          }
            //     }

            //         // 把块级作用域的执行结果付给我的单体对象 通过return返回去
            //   return {  //这里返回的是一个函数  整体代码执行完后最后要返回的
            //     getInstance :function(){
            //           if(!uniqInterstance){
            //             uniqInterstance=init(); //什么时候用单体 就去调用
            //           }
            //           return uniqInterstance;
            //     }
                  
            //   };
            // })();
            // //  调用  这种写法就不会一次性把所有单体都返回,而是要什么就调用什么单体
            // ZLJ.Singleton.getInstance().method2();

分支单体模式

   //         // 4.分支单体 :判断程序的分支 浏览器差异的检测
    //         var ZLJ={};
    //         var def=false;  //判断是什么浏览器  这里用true false  代替
    //         ZLJ.Singleton=(function(){
    //             var objA={   //比如这个是 火狐浏览器  内部的一些配置
    //             attr1:'HF属性1',
    //            //   属性2
    //            //   方法1
    //            //   方法2
   
    //         };
    //           var objB={   //比如这个是 IE浏览器  内部的一些配置
    //             attr1:'IE属性1',
    //             //   属性2
    //             //   方法1
    //             //   方法2

    //          };
    //          return def ? objA : objB;  //三元运算符
    //   })();
    //      alert(ZLJ.Singleton.attr1);

okok,今天就先这样,继续加油!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值