-
-
Notifications
You must be signed in to change notification settings - Fork 44
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JavaScript设计模式----单例模式 #18
Labels
Comments
2.1 里面 |
@harrisoff 这里是显式的声明 |
@zhiqiang21 我的看法是这样的: var Singleton = function(name) {
this.name = name;
// 这个 this 是 Singleton 的实例
this.instance = null;
};
// ...
Singleton.getInstance = function(name) {
// 这里的 this 指向的是 Singleton 这个函数
if (!this.instance) {
// 也就是说这个 this.instance 成为了 Singleton 的一个静态属性
// 跟上面的 this.instance = null 的 instance 不是一个东西
this.instance = new Singleton(name);
}
return this.instance;
}; |
我觉得你说的是对的,如果在构造函数里使用 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
声明:这个系列为阅读《JavaScript设计模式与开发实践》 ----曾探@著一书的读书笔记
目录:
1.单例模式的特点和定义
2.传统面向对象语言的单例模式
2.1传统语言描述的单例模式JavaScript实现
或者使用闭包的形式创建单例模式,同时符合惰性单例的特性
2.2透明的单例模式:
这样编写单例模式的缺点:
为了把
instance
封装起来,我们使用了自执行的匿名函数和闭包,并且让这个匿名函数返回真正的Singleton
构造方法,这增加了一些程序的复杂度。CreateDiv
的构造函数负责了两件事情。1.创建对像和执行初始化init
方法,第二是保证只有一个对象。不符合设计模式中的单一职责的概念。2.3引入代理实现单例模式
引入代理实现单例模式的特点:
我们负责管理单例的逻辑移到了代理类
ProxySingletonCreateDiv
中。这样一来,CreateDiv
就变成了一个普通的类,他跟ProxySingletonCreateDiv
组合起来可以达到单例模式的效果。3.JavaScript的单例模式对比
在以上的代码中实现的单例模式都混入了传统面向对象语言的特点。而没有利用JavaScript这们语言的特点来实现一个单例模式。
3.1惰性单例的例子
概念描述:
代码解析:
这里的对惰性单例的实现主要是只有单例了网页上的登录按钮,才会去创建,登录框的
dom
节点,并且只是创建一次。3.2通用的单例模式例子
根据3.1的代码示例,我们的单例对像,但是并不是通用的,比如我们要创建的不是
div
而是iframe
,那要怎么办呢?通用的单例创建的例子就是通过封装一个
getSingle
需要实现单例模式的对象。而且只是会只创建一次。因为使用了闭包的原因通过getSingle
创建的result
会在内存中一直存在不会销毁(除非页面关闭,或者手动释放)。总结:
单例模式是一种简单但非常实用的模式,特别是惰性单例技术,在合适的时候才创建对像,并且只创建唯一的一个。更奇妙的是,创建对象和管理单例的职责被分布在两个不同的方法中,这两个方法组合起来才具有单例模式的威力。
The text was updated successfully, but these errors were encountered: