美文网首页
单例模式学习

单例模式学习

作者: vckah | 来源:发表于2018-07-03 11:02 被阅读0次

单例模式保证系统中只有一个实例对象。比如说打开一个配置文件的实例,我们需要保证在系统运行过程中,这个配置文件不能同时被打开,所以构造这个文件的实例只能有一个。
Python 中有几种方式可以实现单例模式

  • 使用 new
  • 使用模块
  • 使用装饰器
  • 使用元类
    先来看一看使用 new:
class Singleton(object):
    _instance = None
    def __new__(cls, *args, **kw):
        if not cls._instance:
            cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)  
        return cls._instance  

class MyClass(Singleton):  
    pass

# 这样的话,在系统中实例化多个 MyClass 都可以保证只有一个 MyClass

但是以上这个只在单线程中是单例,如果在多线程环境中,其并不是单例。为此我们需要额外的加上一把锁。

from threading import threading
class Singleton(object):
    _instance = None
->  lock = threading.RLock()
    def __new__(cls, *args, **kw):
-->>    cls.lock.acquire()
        if not cls._instance:
            cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)  
      -->>  cls.lock.release()
        return cls._instance  

class MyClass(Singleton):  
    pass
# 这里使用了 RLock。
#为什么不使用 Lock 呢,是因为一个 Lock 可能会出现死锁。
#RLock 保证可以获取到多个锁

另外说一说模块。Python 加载模块时,只会在第一次遇见的时候导入,之后再次遇到导入这个模块时,Python 并不会再次导入,而是会去内存中查找这个模块,并将其信息放置到当前环境中。

# test.py
class My_Singleton(object):
    def test(self):
        pass
 
my_singleton = My_Singleton()

这里的 my_singleton 就是一个单例。在其他 py 文件中导入它

from test import my_singleton

my_singleton.test()
  • 装饰器
    与类的写法差不多
def singleton(cls, *args, **kwargs):
    instance = {}
    def getinstance(cls, *args, **kw):
        if cls not in instance:
            instance[cls] = cls(*args, **kwargs)
        return instance[cls]
    return getinstance

@singleton
class MyClass(object):  
    pass

元类的话,还不太了解,好像是用到了 metaclass ,以后再补充。

相关文章

  • 设计模式系列教程之单例模式-原理介绍

    设计模式系列教程之单例模式-原理介绍 一:单例模式(Singleton)学习步骤 经典的单例模式原理: 本文出处:...

  • iOS-单例模式

    swift的单例设计模式 OC的单例设计模式 新学习一种单例思想

  • 【设计模式】单例模式

    学习文章 iOS设计模式 - 单例 SwiftSingleton 原理图 说明 单例模式人人用过,严格的单例模式很...

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

  • 设计模式之单例模式

    单例设计模式全解析 在学习设计模式时,单例设计模式应该是学习的第一个设计模式,单例设计模式也是“公认”最简单的设计...

  • Android 单例模式学习

    android的单例模式学习 1 饿汉单例模式 优点 : 缺点 : 2.0 懒汉模式 优点 : 缺点 : 2.1 ...

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • JAVA中各种单例模式的实现与分析

    单例模式是学习设计模式过程中最基本的一个设计模式,基本上一开始学习就会学到单例模式,实际上在java中实现单例模式...

  • 初识设计模式之单例模式

    此文为笔者个人的学习笔记,在学习部分博客、书籍、资料后所总结,仅供参考。 对单例模式的认识单例模式是什么单例模式的...

网友评论

      本文标题:单例模式学习

      本文链接:https://www.haomeiwen.com/subject/gldduftx.html