Javascript 设计模式 -- Singleton(单例)模式
来源:互联网 发布:数控g92车螺纹怎么编程 编辑:程序博客网 时间:2024/05/08 00:41
从经典意义上来说
Singleton模式,在该实例不存在的情况下,可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,它会简单返回该对象的引用。Singleton不同于静态类,因为我们可以推迟他们的初始化。
var mySingleton = (function() { var instance; function init() { function privateMethod() { console.log("i am private"); } var privateVariable = "i am also private"; var privateRandomNumber = Math.random(); return { publickMethod: function () { console.log("the public can see me"); }, publicProperty: "i am also public", getRandomNumber: function () { return privateRandomNumber; } }; }; return { getInstance: function() { if (!instance) { instance = init(); } return instance; } };}) ();var myBadSingleton = (function() { var instance; function init() { var privateRandomNumber = Math.random(); return { getRandomNumber: function() { return privateRandomNumber; } }; }; return { getInstance: function() { instance = init(); return instance; } };})();var singleA = mySingleton.getInstance();var singleB = mySingleton.getInstance();console.log(singleA.getRandomNumber());console.log(singleB.getRandomNumber());console.log(singleA.getRandomNumber() === singleB.getRandomNumber()); // trueconsole.log("\n");var badSingleA = myBadSingleton.getInstance();var badSingleB = myBadSingleton.getInstance();console.log(badSingleA.getRandomNumber());console.log(badSingleB.getRandomNumber());console.log(badSingleA.getRandomNumber() === badSingleB.getRandomNumber()); // false
Singleton模式的适用性描述如下:
1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
2、该唯一的实例应该是通过子类化可扩展的,并且客户应该无需要改代码就能使用一个扩展的实例。
在实践中
var SingletonTester = (function() { function Singleton( options ) { options = options || { }; this.name = "SingletonTester"; this.pointX = options.pointX || 6; this.pointY = options.pointY || 10; } var instance; var _static = { name: "SingletonTester", getInstance: function ( options ) { console.log(instance + "\n"); if ( instance === undefined ) { instance = new Singleton( options ); } return instance; } }; return _static;})();var test1 = SingletonTester.getInstance({pointX: 15});console.log(test1);console.log("\n");var test2 = SingletonTester.getInstance({pointX: 7});console.log(test2);
结果如图:
0 0
- javascript设计模式-singleton(单例)模式
- JavaScript设计模式--单例模式Singleton
- Javascript 设计模式 -- Singleton(单例)模式
- javascript设计模式之单例(singleton)模式
- javascript设计模式:单例模式(Singleton)
- 设计模式---单例模式(singleton)
- 设计模式--单例模式(Singleton)
- 设计模式--单例模式(Singleton)
- 设计模式-单例模式(Singleton)
- 【设计模式】-单例模式(Singleton)
- 设计模式---单例模式(singleton)
- 设计模式 -- 单例模式(Singleton)
- 设计模式:单例模式(Singleton)
- 设计模式:单例模式(Singleton)
- 设计模式:单例模式(Singleton)
- 设计模式:单例模式(Singleton)
- 设计模式:单例模式(Singleton)
- 设计模式-单例模式(Singleton)
- 考研也考完了,继续ACM。
- c++语言中class中的virtual函数的隐藏和屏蔽
- “NPC”程序员涉足游戏行业初体验
- 10.3.1 树处理的难点
- iOS中如何生成变暗的图片
- Javascript 设计模式 -- Singleton(单例)模式
- 1分钟让别人喜欢你(三)
- 【BNU校赛】F. Star Trek: First Contact(裸0-1背包)
- NSString应该用initWithFormat? 还是 stringWithFormat?
- 演练:使用 Microsoft Expression Blend 创建按钮
- javascript中的正则
- 关于eclipse可以成功连接mysql,而MyEclipse连接失败的问题
- UVa 508 - Morse Mismatches(查找)
- android轮询最佳实践service+AlarmManager+Thread