_TANGTANG

导航

设计模式---单例模式

单例模式:

1、最常见的一种模式。在传统的开发中,单例模式就是保证一个类,只有一个实例。实现的方法是先判断是否存在该类的实例,如果不存在,则创建一个实例,如果存在,则直接返回实例。在传统开发工程师眼里,单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。在JavaScript里,单例作为一个命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象

 

			//常规方法:
			var Singleton = (function() {
				var instantiated;

				function init() {
					/*这里定义单例代码*/
					//私有变量&方法
					var privateVariable="something";
					function showPrivate(){
						console.log(privateVariable);
					}
					//公共接口:共有变量&共有方法
					return {
						publicMethod: function() {
							console.log(privateVariable);
						},
						publicProperty: 'test'
					};
				}
				
				return {
					getInstance: function() {
						if(!instantiated) {
							instantiated = init();
						}
						return instantiated;
					}
				};
			})();
			/*调用公有的方法来获取实例:*/
			Singleton.getInstance().publicMethod();

 

2、单例一般是用在系统间各种模式的通信协调上,下面的代码是一个单例的最佳实践:

		var SingletonTester=(function (){
			//传递给单例一个参数集合,若无,则为空。
			function Singleton(args){
				var args=args||{};
				this.name="SingletonTester";
				this.pointX=args.pointX||6;
				this.pointY=args.pointY||10;
			}
			//实例容器
			var instance;
			var _static={
				name:"SingletonTester",
				//获取实例的方法
				//返回Singleton的实例
				getInstance:function(args){
					if(instance===undefined){
						instance=new Singleton(args);
					}
					return instance;
				}
			};
			return _static;
		})();
		var singletonTest=SingletonTester.getInstance({pointX:5})
		console.log(singletonTest.pointX);   //5

 

posted on 2016-09-05 16:17  _TANGTANG  阅读(205)  评论(0)    收藏  举报