资讯专栏INFORMATION COLUMN

每天一个设计模式之单例模式

yy736044583 / 2659人阅读

摘要:博主按每天一个设计模式旨在初步领会设计模式的精髓,目前采用靠这吃饭和纯粹喜欢两种语言实现。单例模式用途如果一个类负责连接数据库的线程池日志记录逻辑等等,此时需要单例模式来保证对象不被重复创建,以达到降低开销的目的。

</>复制代码

  1. 博主按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用javascript(_靠这吃饭_)和python(_纯粹喜欢_)两种语言实现。诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :)

网速过慢的朋友请移步《每天一个设计模式之单例模式》原文地址

欢迎来我的小站看更多干货 + 免费教程:godbmw.com

0. 项目地址

本节课源码地址

《每天一个设计模式》地址

1. 什么是单例模式?

</>复制代码

  1. 单例模式定义:保证一个类仅有一个实例,并提供访问此实例的全局访问点。
2. 单例模式用途

如果一个类负责连接数据库的线程池、日志记录逻辑等等,此时需要单例模式来保证对象不被重复创建,以达到降低开销的目的。

3. 代码实现

</>复制代码

  1. 需要指明的是,以下实现的单例模式均为“惰性单例”:只有在用户需要的时候才会创建对象实例。
3.1 python3 实现

</>复制代码

  1. class Singleton:
  2. # 将实例作为静态变量
  3. __instance = None
  4. @staticmethod
  5. def get_instance():
  6. if Singleton.__instance == None:
  7. # 如果没有初始化实例,则调用初始化函数
  8. # 为Singleton生成 instance 实例
  9. Singleton()
  10. return Singleton.__instance
  11. def __init__(self):
  12. if Singleton.__instance != None:
  13. raise Exception("请通过get_instance()获得实例")
  14. else:
  15. # 为Singleton生成 instance 实例
  16. Singleton.__instance = self
  17. if __name__ == "__main__":
  18. s1 = Singleton.get_instance()
  19. s2 = Singleton.get_instance()
  20. # 查看内存地址是否相同
  21. print(id(s1) == id(s2))
3.2 javascript 实现

</>复制代码

  1. const Singleton = function() {};
  2. Singleton.getInstance = (function() {
  3. // 由于es6没有静态类型,故闭包: 函数外部无法访问 instance
  4. let instance = null;
  5. return function() {
  6. // 检查是否存在实例
  7. if (!instance) {
  8. instance = new Singleton();
  9. }
  10. return instance;
  11. };
  12. })();
  13. let s1 = Singleton.getInstance();
  14. let s2 = Singleton.getInstance();
  15. console.log(s1 === s2);

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44902.html

相关文章

  • 每天一个设计模式单例模式

    摘要:博主按每天一个设计模式旨在初步领会设计模式的精髓,目前采用靠这吃饭和纯粹喜欢两种语言实现。单例模式用途如果一个类负责连接数据库的线程池日志记录逻辑等等,此时需要单例模式来保证对象不被重复创建,以达到降低开销的目的。 博主按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用javascript(_靠这吃饭_)和python(_纯粹喜欢_)两种语言实现。诚然,每种设计模式都有多种实...

    lijy91 评论0 收藏0
  • 大话PHP设计模式单例模式

    摘要:上面是简单的单例模式,自己写程序的话够用了,如果想继续延伸,请传送至大话设计模式之单例模式升级版 看了那么多单例的介绍,都是上来就说怎么做,也没见说为什么这么做的。那小的就来说说为什么会有单例这个模式以便更好的帮助初学者真正的理解这个设计模式,如果你是大神,也不妨看完指正一下O(∩_∩)O首先我不得不吐槽一下这个模式名字单例,初学者通过字面很难理解什么是单例,我觉得应该叫唯一模式更贴切...

    VEIGHTZ 评论0 收藏0
  • 大话PHP设计模式单例模式升级版

    摘要:用来指向已创建好的实例构造函数为空注意这里是关键这是我们需要调用的方法把函数也定义为空,这样就大功告成啦。 接上一篇大话PHP设计模式之单例模式 这一篇介绍一下升级版的单例模式,废话不说先上代码 不完美的单例模式 class singleMode { //用来指向已创建好的实例 public static $instance; //判断是...

    darcrand 评论0 收藏0
  • 优才公开课笔记:php设计模式(一) 单例模式

    摘要:最近开展了三次设计模式的公开课,现在来总结一下设计模式在中的应用,这是第一篇创建型模式之单例模式。不过因为不支持多线程所以不需要考虑这个问题了。 最近开展了三次设计模式的公开课,现在来总结一下设计模式在PHP中的应用,这是第一篇创建型模式之单例模式。 一、设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用、容易被他人理解的、可靠的代码设计经验的总结。 设计模式不...

    guyan0319 评论0 收藏0
  • JavaScript设计模式单例模式

    摘要:原文博客地址单例模式系统中被唯一使用,一个类只有一个实例。中的单例模式利用闭包实现了私有变量两者是否相等弱类型,没有私有方法,使用者还是可以直接一个,也会有方法分割线不是单例最简单的单例模式,就是对象。 原文博客地址:https://finget.github.io/2018/11/06/single/ 单例模式 系统中被唯一使用,一个类只有一个实例。实现方法一般是先判断实例是否存在,...

    lk20150415 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<