/*
1 简单单体
*/
var Singleton = {
attr1: 1 ,
method1:function(){
//do sth
}
};
alert(Singleton.attr1);
Singleton.method1(); //单体模式一般用于划分命名空间 也就是区分是哪位开发人员的代码 例如
//张三工程师开发的代码
var Zhangsan = { };
//把张三的逻辑写在这里面
Zhangsan.Singleton = {
attr1:1,
method1:function(){
//do sth
}
}; /*
2 闭包单体: 闭包主要的目的是保护私有变量数据
*/
// 命名空间
var Zhangsan = {};
Zhangsan.Singleton = ( function(){
//私有变量和方法
var a = 1;
function f(){
//do sth
}
//返回单体对象
return {
attr1: a,
method1:function(){
return f();
}
};
})();
alert(Zhangsan.Singleton.attr1);
Zhangsan.Singleton.method1(); /*
3 惰性单体:(和闭包单体有相似的地方)
*/ var Zhangsan = {};
Zhangsan.Singleton = (function(){
//私有变量 控制返回的单体对象
var uniqInstance;
//初始化方法,控制返回的单体中有哪些东西
function init(){
//私有变量
var a = 10;
var fn = function(){
alert("fn");
};
return {
attr : a,
method : fn
};
} return {
getInstance:function(){ //如果有单体 则返回 否则创建一个返回
if(!uniqInstance){ //如果不存在
uniqInstance = init();
}
return uniqInstance;
}
};
})(); //调用惰性单体
alert(Zhangsan.Singleton.getInstance().attr); //
Zhangsan.Singleton.getInstance().method(); //fn /*
4 分支单体:判断程序分支 浏览器的差异检测
*/
var Zhangsan ={};
var different = true; //用于标记不同的浏览器
Zhangsan.Singleton = (function(){
var objA = { //a浏览器的内部配置
//属性、方法等
attr:"a",
method : function(){
alert("fn");
}
};
var objB = { //b浏览器的内部配置
//属性、方法等
};
return (different) ? objA:objB; //根据不同的浏览器 返回不同的对象
})(); alert(Zhangsan.Singleton.attr); //a
相关文章
- Android中实现定时器的四种方式
- 基于SqlSugar的开发框架循序渐进介绍(24)-- 使用Serialize.Linq对Lambda表达式进行序列化和反序列化 基于SqlSugar的开发框架循序渐进介绍(5)-- 在服务层使用接口注入方式实现IOC控制反转 基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传 基于SqlSugar的开发框架循序渐进介绍(12)-- 拆分页面模块内容为组件,实现分而治之的处理 基于SqlSugar的开发框架循序渐进介绍(14)-- 基于Vue3+TypeScript的全局对象的注入和使用 基于SqlSugar的开发框架循序渐进介绍(16)-- 工作流模块的功能介绍 基于SqlSugar的开发框架循序渐进介绍(17)-- 基于CSRedis实现缓存的处理 基于SqlSugar的开发框架循序渐进介绍(21)-- 在工作流列表页面中增加一些转义信息的输出,在后端进行内容转换 基于SqlSugar的开发框架循序渐进介
- Python中的单例模式的几种实现方式的优缺点及优化
- 基于SqlSugar的开发框架循序渐进介绍(22)-- Vue3+TypeScript的前端工作流模块中实现统一的表单编辑和表单详情查看处理 基于SqlSugar的开发框架循序渐进介绍(5)-- 在服务层使用接口注入方式实现IOC控制反转 基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传 基于SqlSugar的开发框架循序渐进介绍(12)-- 拆分页面模块内容为组件,实现分而治之的处理 基于SqlSugar的开发框架循序渐进介绍(14)-- 基于Vue3+TypeScript的全局对象的注入和使用 基于SqlSugar的开发框架循序渐进介绍(16)-- 工作流模块的功能介绍 基于SqlSugar的开发框架循序渐进介绍(17)-- 基于CSRedis实现缓存的处理 基于SqlSugar的开发框架循序渐进介绍(21)-- 在工作流列表页面中增加一些转义信息的输出,在后端进行内容转换 基于SqlSugar的开发框
- 基于SqlSugar的开发框架循序渐进介绍(21)-- 在工作流列表页面中增加一些转义信息的输出,在后端进行内容转换 基于SqlSugar的开发框架循序渐进介绍(5)-- 在服务层使用接口注入方式实现IOC控制反转 基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传 基于SqlSugar的开发框架循序渐进介绍(12)-- 拆分页面模块内容为组件,实现分而治之的处理 基于SqlSugar的开发框架循序渐进介绍(14)-- 基于Vue3+TypeScript的全局对象的注入和使用 基于SqlSugar的开发框架循序渐进介绍(16)-- 工作流模块的功能介绍 基于SqlSugar的开发框架循序渐进介绍(17)-- 基于CSRedis实现缓存的处理
- 基于SqlSugar的开发框架循序渐进介绍(20)-- 在基于UniApp+Vue的移动端实现多条件查询的处理 基于SqlSugar的开发框架循序渐进介绍(5)-- 在服务层使用接口注入方式实现IOC控制反转 基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传 基于SqlSugar的开发框架循序渐进介绍(12)-- 拆分页面模块内容为组件,实现分而治之的处理 基于SqlSugar的开发框架循序渐进介绍(14)-- 基于Vue3+TypeScript的全局对象的注入和使用 基于SqlSugar的开发框架循序渐进介绍(16)-- 工作流模块的功能介绍 基于SqlSugar的开发框架循序渐进介绍(17)-- 基于CSRedis实现缓存的处理
- 基于SqlSugar的开发框架循序渐进介绍(17)-- 基于CSRedis实现缓存的处理 基于SqlSugar的开发框架循序渐进介绍(5)-- 在服务层使用接口注入方式实现IOC控制反转 基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传 基于SqlSugar的开发框架循序渐进介绍(12)-- 拆分页面模块内容为组件,实现分而治之的处理 基于SqlSugar的开发框架循序渐进介绍(13)-- 基于ElementPlus的上传组件进行封装,便于项目使用 基于SqlSugar的开发框架循序渐进介绍(14)-- 基于Vue3+TypeScript的全局对象的注入和使用 基于SqlSugar的开发框架循序渐进介绍(15)-- 整合代码生成工具进行前端界面的生成 基于SqlSugar的开发框架循序渐进介绍(16)-- 工作流模块的功能介绍
- 基于SqlSugar的开发框架循序渐进介绍(15)-- 整合代码生成工具进行前端界面的生成 基于SqlSugar的开发框架循序渐进介绍(12)-- 拆分页面模块内容为组件,实现分而治之的处理 基于SqlSugar的开发框架循序渐进介绍(12)-- 拆分页面模块内容为组件,实现分而治之的处理 基于SqlSugar的开发框架循序渐进介绍(5)-- 在服务层使用接口注入方式实现IOC控制反转 基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传 基于SqlSugar的开发框架循序渐进介绍(12)-- 拆分页面模块内容为组件,实现分而治之的处理 基于SqlSugar的开发框架循序渐进介绍(13)-- 基于ElementPlus的上传组件进行封装,便于项目使用 基于SqlSugar的开发框架循序渐进介绍(14)-- 基于Vue3+TypeScript的全局对象的注入和使用
- JavaScript中实现继承的三种方式和实例
- 基于Python中单例模式的几种实现方式及优化详解