我是靠谱客的博主 勤恳招牌,最近开发中收集的这篇文章主要介绍设计模式之 - 单例模式(创建型设计模),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

单例模式

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

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

单例模式例子

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对象 获取内部创建的单例模式对象

最后

以上就是勤恳招牌为你收集整理的设计模式之 - 单例模式(创建型设计模)的全部内容,希望文章能够帮你解决设计模式之 - 单例模式(创建型设计模)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部