理解JavaScript设计模式中的单例模式

 更新时间:2022年04月26日 14:13:32   作者:掘金安东尼  
这篇文章主要介绍了理解JavaScript设计模式中的单例模式,单例模式即Singleton Pattern是最简单的设计模式之一,下文更多相关介绍感兴趣的小伙伴可以参考一下

单例模式(Singleton Pattern)是最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

  • 1、单例类只能有一个实例。
  • 2、单例类必须自己创建自己的唯一实例。
  • 3、单例类必须给所有其他对象提供这一实例。

这样做的缺点就是:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

优点则有:

  • 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。
  • 2、避免对资源的多重占用。

最简单的单例模式举例:

// 定义一个类
function Singleton(name) {
this.name = name;
this.instance = null;
}
// 原型扩展类的一个方法getName()
Singleton.prototype.getName = function() {
console.log(this.name)
};
// 获取类的实例
Singleton.getInstance = function(name) {
if(!this.instance) {
this.instance = new Singleton(name);
console.log(this.instance) // {name: 'a', instance: null}
}
return this.instance
};
// 获取对象1
var a = Singleton.getInstance('a');
// 获取对象2
var b = Singleton.getInstance('b');
// 进行比较
console.log(a === b); // true

不过,这样写,不够直观,因为我们通常都是通过 new 来创建实例的;

所以,改写为:

// 单例构造函数
function CreateSingleton (name) {
this.name = name;
this.getName();
};
// 获取实例的名字
CreateSingleton.prototype.getName = function() {
console.log(this.name)
};
// 单例对象
var Singleton = (function(){
var instance;
return function (name) {
if(!instance) {
instance = new CreateSingleton(name);
}
return instance;
}
})();
// 创建实例对象1
var a = new Singleton('a');
// 创建实例对象2
var b = new Singleton('b');
console.log(a===b);

到此这篇关于理解JavaScript设计模式中的单例模式的文章就介绍到这了,更多相关JS单例模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript实现页面跳转的方式汇总

    JavaScript实现页面跳转的方式汇总

    这篇文章主要介绍了JavaScript实现页面跳转的方式汇总的相关资料,需要的朋友可以参考下
    2016-05-05
  • PHP中使用微秒计算脚本执行时间例子

    PHP中使用微秒计算脚本执行时间例子

    这篇文章主要介绍了PHP中使用微秒计算脚本执行时间例子,本文先是讲解了microtime函数的一些知识,然后给出了一个计算脚本运行时间的类,需要的朋友可以参考下
    2014-11-11
  • JS获得URL超链接的参数值实例代码

    JS获得URL超链接的参数值实例代码

    使用js获取超链接中keyword的参数值,具体实现代码如下,感兴趣的朋友可以参考下哈,希望对大家有所帮助
    2013-06-06
  • Bootstrap table右键功能实现方法

    Bootstrap table右键功能实现方法

    这篇文章主要为大家详细介绍了Bootstrap table右键功能的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • js生成缩略图后上传并利用canvas重绘

    js生成缩略图后上传并利用canvas重绘

    这篇文章主要介绍了js生成缩略图后上传,利用canvas重绘,需要的朋友可以参考下
    2014-05-05
  • js实现瀑布流的一种简单方法实例分享

    js实现瀑布流的一种简单方法实例分享

    现在说瀑布流式布局似乎有点晚了,但是每一项技术都是向着“精”和“简”的方向在不断发展,在发展到极致之前,需要一个相当漫长的过程,因此,从这个角度来说,当瀑布流被应用得越来越多的时候,反而更应该讨论它,讨论如何将它改善
    2013-11-11
  • 微信小程序绘制图片发送朋友圈

    微信小程序绘制图片发送朋友圈

    这篇文章主要为大家详细介绍了微信小程序绘制图片发送朋友圈,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • TypeScript中的互斥类型实现方法示例

    TypeScript中的互斥类型实现方法示例

    用了一年时间的TypeScript了,下面这篇文章主要给大家介绍了关于TypeScript中互斥类型实现的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • 基于js中的原型(全面讲解)

    基于js中的原型(全面讲解)

    下面小编就为大家带来一篇基于js中的原型(全面讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • JavaScript数组合并案例讲解

    JavaScript数组合并案例讲解

    这篇文章主要介绍了JavaScript数组合并案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08

最新评论