博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
每天一个设计模式之单例模式
阅读量:6787 次
发布时间:2019-06-26

本文共 1266 字,大约阅读时间需要 4 分钟。

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

  1. 网速过慢的朋友请移步
  2. 欢迎来我的小站看更多干货 + 免费教程:

0. 项目地址

1. 什么是单例模式?

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

2. 单例模式用途

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

3. 代码实现

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

3.1 python3 实现

class Singleton:  # 将实例作为静态变量  __instance = None  @staticmethod  def get_instance():    if Singleton.__instance == None:      # 如果没有初始化实例,则调用初始化函数      # 为Singleton生成 instance 实例      Singleton()    return Singleton.__instance  def __init__(self):    if Singleton.__instance != None:      raise Exception("请通过get_instance()获得实例")    else:      # 为Singleton生成 instance 实例      Singleton.__instance = selfif __name__ == "__main__":  s1 = Singleton.get_instance()  s2 = Singleton.get_instance()  # 查看内存地址是否相同  print(id(s1) == id(s2))

3.2 javascript 实现

const Singleton = function() {};Singleton.getInstance = (function() {  // 由于es6没有静态类型,故闭包: 函数外部无法访问 instance  let instance = null;  return function() {    // 检查是否存在实例    if (!instance) {      instance = new Singleton();    }    return instance;  };})();let s1 = Singleton.getInstance();let s2 = Singleton.getInstance();console.log(s1 === s2);

转载于:https://www.cnblogs.com/geyouneihan/p/9891390.html

你可能感兴趣的文章
vmware workstation的bridged NAT host-only区别与适用场景简介
查看>>
Linux基础知识
查看>>
Struts2中的OGNL详解
查看>>
隐藏/屏蔽服务器信息与web软件版本信息
查看>>
ifstat 网络流量统计工具
查看>>
VLC 2.2.6 Windows下搭建 rtsp流媒体服务器
查看>>
Django2 model操作数据库
查看>>
使用Azure Policy限制所有ASM资源
查看>>
在win7系统下使用TortoiseGit(乌龟git)简单操作Git@OSC
查看>>
强大的ghost.py 使用实例
查看>>
快速搭建NTP时间服务器
查看>>
网络基础
查看>>
碰到 oracle 10g ORA-00257
查看>>
服务器群集实验 ——SQL群集2
查看>>
企业级监控工具cacti安装配置全过程
查看>>
Hibernate的模块结构
查看>>
锁机制
查看>>
gentoo添加自启动
查看>>
Cocos2d-x 3.1 Lua Binding
查看>>
linux 进度条的实现及makefile的简单应用
查看>>