经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
每天一个设计模式之单例模式
来源:cnblogs  作者:GodBMW  时间:2018/11/2 9:11:53  对本文有异议

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

  1. 网速过慢的朋友请移步《每天一个设计模式之单例模式》原文地址
  2. 欢迎来我的小站看更多干货 + 免费教程:godbmw.com

0. 项目地址

1. 什么是单例模式?

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

2. 单例模式用途

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

3. 代码实现

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

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);
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号