设计模式之 - 单例模式(创建型设计模)

单例模式

又称为单体模式,只允许实例化一次的对象类,有时候我们也用一个对象来规划一个命名空间,以便管理对象上的属性和方法。

命名空间 也有人称为名称空间,用来约束每个人定义的变量以避免所有不同的人定义的变量存在重复导致冲突的。

单例模式例子

var Ming = {
	g:function(id){
		return document.getElementById(id);
	},
	c:function(id,key,value){
		this.g(id).style[key] = value;
	}
}

在单例模式中想要使用定义的方法一定要加上命名空间 Ming,所以在上面代码中的 c 方法中的 g 函数调用的时候要改成 Ming.g。由于 g 方法和 c 方法都在 Ming 中,也就是说这 2 个方法都是单例对象 Ming 的。而对象中的 this 指向当前对象。所以我们也可以像上面代码那样直接使用 this.g 。

创建代码库

单例模式 除了定义命名空间的作用之外还有一个作用就是通过单例模式来管理代码库中的各个模块。

比如我们以后在写自己的小型方法库时可以用单例模式来规范自己代码库的各个模块。

var A={
	Util:{
		Util_1:function(){},
		Util_2:function(){}
	},
	Tool:{
		Tool_1:function(){},
		Tool_2:function(){}
	},
	Ajax:{
		getName:function(){},
		postName:function(){}
	}
	// ...
}

使用模块方法时

A.Util.Util_1();
A.Ajax.getName();
// ....

惰性单例

惰性单例 指在需要的时候才会创建,也称为延迟创建。
惰性单例模式,用到时才创建,再次使用是不需要在创建的。

var Lazy = (function(){
	var instance = null;
	// 单例
	function Sligle(){
		/*这里可以定义私有属性和方法*/
		return {
			p:function(){},
			pv:"1.0"
		}
	}
	// 获取单例对象接口
	return (function(){
		// 如果还没有创建单例才开始创建
		if(!instance ){
			instance = Sligle();
		}
		// 返回单例
		return instance;
	})
})()
Lazy().p // 通过 Lazy对象 获取内部创建的单例模式对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值