Javascript设计模式学习二(单例)
2024-10-15 16:50:58
定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点
普通的单例模式:
使用一个变量来标记当前是否已经为某个类创建过对象,如果是的话,在下一次获取该类的实例时,直接返回之前创建的对象。
比如:使用一个变量instance标记是否创建了这个类对象,现在需要用到一个Single类,先判断instance是否为null,若不是则直接return返回,若是则new Singleton();
var instance = null;
return function(){
if(!instance){
instance = new Singleton();
}
return instance;
}
JavaScript中,我们经常会把全局变量当成单例来使用,但全局变量容易造成命名空间污染,使用命名空间可以减少全局变量的数量。
我们常在管理命名空间时使用单例模式,它可以降低你在代码中创建全局变量的数量。
惰性单例:在需要的时候才创建对象实例。(非常有用)
通用的惰性单例:
首先是管理单例逻辑封装在getSingle中,创建对象的方法fn被当作参数动态传入
var getSingle = function(fn){
var result;
return function(){
return result || (result = fn.apply(this,arguments));
}
};
fn可以是创建弹窗的方法createDialog或者其他方法,传入getSingle后,返回一个新的函数,并且用一个变量result保存fn的结果,因为result在闭包中,所以它永远不会被销毁,如果result已经被赋值,那么它将返回这个值。
var createDialog = function(){
//创建Dialog代码
}
document.getElementById("btn").onclick = function(){
var dialogLayer = getSingle(createDialog);//这样创建好Dialog了
}
把创建实例对象和管理对象分别放置在两个方法里,这两个方法可以独立变化而互不影响,减低耦合。这两个方法组合起来才具有单例模式的神奇作用
这种单例模式的用途不止创建对象,可以用于“一次绑定事件”,还有其他。。
最新文章
- fluent-ffmpeg 常用函数
- github.com使用方法
- js,格式化long类型日期封装
- Spring Security3学习实例
- CGI综述
- [GraphQL] Serve a GraphQL Schema as Middleware in Express
- vs常用调试快捷键
- 了解 JavaScript 中的内置对象
- Swift入门篇-Hello World
- 【Lucene3.6.2入门系列】第05节_自定义停用词分词器和同义词分词器
- js生成随机字符串或者随机数
- 我的hibernate学习记录(一)
- logback使用配置详解
- recurrent model for visual attention
- openstack项目【day23】:keystone组件网关协议
- ArcGIS Pro玩转BIM应用浅谈
- python3 pip 安装Scrapy在win10 安装报错error: Microsoft Visual C++ 14.0 is required. Get it with ";Microsoft Visual C++ Build Tools";: http://landinghub.visualstudio.com/visual-cpp-build-tools
- 中间件RabbitMQ之运维篇
- win7访问局域网总提示用户名密码错误解决方案
- 【MarkMark学习笔记学习笔记】javascript/js 学习笔记