zoukankan      html  css  js  c++  java
  • Python如何实现单例模式?其他23中设计模式python如何实现?

    单例模式主要有四种方法:new、共享属性、装饰器、import。

    # __ new__方法:
    
    class Singleton(object):
        def __new__(cls, *args, **kw): 
            if not hasattr(cls, '_instance'): 
                orig = super(Singleton, cls) 
                cls._instance = orig.__new__(cls, *args, **kw) 
                return cls._instance 
    class MyClass(Singleton): 
        a = 1
    
    # 共享属性:
    # 创建实例时把所有实例的__ dict__指向同一个字典,这样它们就具有了相同的属性和方法。
    
    class Borg(object): 
        _state = {} 
        def __new__(cls, *args, **kw): 
            ob = super(Borg, cls).__new__(cls, *args, **kw) 
            ob.__dict__ = cls._state 
            return ob 
    class MyClass2(Borg): 
        a = 1
    
    # 装饰器版本
    
    def singleton(cls, *args, **kw): 
        instances = {} 
        def getinstance(): 
            if cls not in instances: 
                instances[cls] = cls(*args, **kw) 
                return instances[cls] 
            return getinstance 
    @singleton 
    class MyClass:
    
    #import方法,作为python的模块是天然的单例模式
    
    # mysingleton.py 
    class My_Singleton(object): 
        def foo(self): 
            pass 
        my_singleton = My_Singleton() 
    # to use 
    from mysingleton import my_singleton 
    my_singleton.foo()
    

    其他23中设计模式基本分为创建型、结构型和行为型模式。
    创建模式,提供实例化的方法,为适合的状况提供相应的对象创建方法。
    结构化模式,通常用来处理实体之间的关系,使得这些实体能够更好地协同工作。
    行为模式,用于在不同的实体间建立通信,为实体之间的通信提供更容易,更灵活的通信方法。
    各模式的实现可根据其特点编写代码。

  • 相关阅读:
    airpods2连接win10的方法步骤
    JSON学习笔记
    TCP-IP总线与CAN总线优缺点对比
    svn切换目录
    SQLite学习笔记
    python-opencv安装及入门
    python数据可视化
    python-opencv视觉巡线
    python-opencv进阶应用
    QT窗口和部件
  • 原文地址:https://www.cnblogs.com/python960410445/p/11799525.html
Copyright © 2011-2022 走看看