JavaScript 设计模式学习 Singleton


Posted in Javascript onJuly 27, 2009
/* Basic Singleton. */ 
var Singleton = { 
attribute1: true, 
attribute2: 10, 
method1: function() { 
}, 
method2: function(arg) { 
} 
}; 
单件模式最主要的用途之一就是命名空间: 
/* GiantCorp namespace. */ 
var GiantCorp = {}; 
GiantCorp.Common = { 
// A singleton with common methods used by all objects and modules. 
}; 
GiantCorp.ErrorCodes = { 
// An object literal used to store data. 
}; 
GiantCorp.PageHandler = { 
// A singleton with page specific methods and attributes. 
}; 
利用闭包在单件模式中实现私有方法和私有变量: 
GiantCorp.DataParser = (function() { 
// Private attributes. 
var whitespaceRegex = /\s+/; 
// Private methods. 
function stripWhitespace(str) { 
return str.replace(whitespaceRegex, ''); 
} 
function stringSplit(str, delimiter) { 
return str.split(delimiter); 
} 
// Everything returned in the object literal is public, but can access the 
// members in the closure created above. 
return { 
// Public method. 
stringToArray: function(str, delimiter, stripWS) { 
if(stripWS) { 
str = stripWhitespace(str); 
} 
var outputArray = stringSplit(str, delimiter); 
return outputArray; 
} 
}; 
})(); // Invoke the function and assign the returned object literal to 
// GiantCorp.DataParser. 
实现Lazy Instantiation 单件模式: 
MyNamespace.Singleton = (function() { 
var uniqueInstance; // Private attribute that holds the single instance. 
function constructor() { // All of the normal singleton code goes here. 
... 
} 
return { 
getInstance: function() { 
if(!uniqueInstance) { // Instantiate only if the instance doesn't exist. 
uniqueInstance = constructor(); 
} 
return uniqueInstance; 
} 
} 
})(); 
MyNamespace.Singleton.getInstance().publicMethod1();
Javascript 相关文章推荐
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
Oct 26 Javascript
javascript实现日期按月份加减
May 15 Javascript
AngularJS 仿微信图片手势缩放的实例
Sep 28 Javascript
深入理解Angular4订阅(Subscribe)与取消
Nov 22 Javascript
微信小程序使用gitee进行版本管理
Sep 20 Javascript
微信小程序实现图片滚动效果示例
Dec 05 Javascript
JS执行控制之节流模式实例分析
Dec 21 Javascript
浅谈Javascript常用正则表达式应用
Mar 08 Javascript
Vue父组件如何获取子组件中的变量
Jul 24 Javascript
详解JavaScript修改注册表的方法
Jan 05 Javascript
原生JavaScript实现的无缝滚动功能详解
Jan 17 Javascript
vue element ui validate 主动触发错误提示操作
Sep 21 Javascript
xml 封装与解析(javascript和C#中)
Jul 26 #Javascript
JavaScript 捕获窗口关闭事件
Jul 26 #Javascript
jquery tools之tooltip
Jul 25 #Javascript
jquery tools之tabs 选项卡/页签
Jul 25 #Javascript
jquery JSON的解析方式
Jul 25 #Javascript
jqPlot Option配置对象详解
Jul 25 #Javascript
jqPlot jquery的页面图表绘制工具
Jul 25 #Javascript
You might like
一个自定义位数的php多用户计数器代码
2007/03/11 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
2018/05/11 PHP
PHP7新增函数
2021/03/09 PHP
JS去除字符串的空格增强版(可以去除中间的空格)
2009/08/26 Javascript
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
Knockout visible绑定使用方法
2013/11/15 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
激动人心的 Angular HttpClient的源码解析
2017/07/10 Javascript
微信小程序 按钮滑动的实现方法
2017/09/27 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
Django学习教程之静态文件的调用详解
2018/05/08 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
python3.6+django2.0+mysql搭建网站过程详解
2019/07/24 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
Python爬虫后获取重定向url的两种方法
2021/01/19 Python
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
2014/05/03 HTML / CSS
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
Elemis美国官网:英国的第一豪华护肤品牌
2018/03/15 全球购物
德国自行车商店:Tretwerk
2019/06/21 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
万户网络JAVA程序员岗位招聘笔试试卷
2013/01/08 面试题
自动化专业毕业生求职信
2014/06/18 职场文书
个人培训总结
2015/03/05 职场文书
创业计划书之宠物店
2019/09/19 职场文书
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers