又来更新了,今天来分享我昨天学习到的四种单体模式, 废话不多说,直接看看下面代码
简单单体模式
// 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,今天就先这样,继续加油!!!