设计模式——单例模式

参考链接:https://www.cnblogs.com/huchong/p/8244279.html

单例模式:

  单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。例如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个名称为AppConfig的类来读取配置信息。程序运行期间,可能很多地方都需要使用配置文件的内容,很多地方就会创建AppConfig类的实例,这样就会导致系统中存在多个AppConfig类的实例,会严重浪费内存资源,因此,我们希望AppConfig这样的类在程序运行期间只存在一个实例。

实现单例模式的几种方式:

  1.使用模块

  Python的模块就是天然的单例模式。因为模块在第一次导入就会生成.pyc文件,当第二次导入时会直接加载.pyc文件,而不会再次执行模块代码,所以我们只需要把相关函数定义在一个模块中,就可以获得一个单例对象。

# mysingleton.py

class Singleton:
    def foo(self):
        pass
singleton = Singleton()

  将上面的代码保存在文件mysingleton.py中,使用时直接在其它文件中导入此文件中对象,这个对象就是单例模式对象。

  2.使用装饰器

def Singleton(cls):
    _instance = {}

    def _singleton(*args, **kargs):
        if cls not in _instance:
            _instance[cls] = cls(*args, **kargs)
        return _instance[cls]

    return _singleton


@Singleton
class A(object):
    a = 1

    def __init__(self, x=0):
        self.x = x


a1 = A(2)
a2 = A(3)

  3.使用类

 

  4.基于__new__方法实现(推荐)

 

  5.基于metaclass方式实现

posted @ 2022-02-21 15:08  呆贝斯  阅读(24)  评论(0编辑  收藏  举报