设计模式分类:
结构型
行为型
创建型

单例模式属于创建型设计模式

单例模式主要使用在
日志记录 ->将多项服务的日志信息按照顺序保存到一个特定日志文件
数据库操作 -> 使用一个数据库对象进行操作,保证数据的一致性
打印机后台处理程序
以及其他程序


该程序运行过程中
    只能生成一个实例
       避免对同一资源产生相互冲突的请求  

单例设计模式的意图:
    确保类有且只有一个对象被创建。
    为对象提供一个访问点,以使程序可以全局访问该对象。
    控制共享资源的并行访问

单例模式的 UML 图

设计模式_理解单例设计模式_IT业界

 

 

实现单例模式的一个简单方法是:
    使构造函数私有化
    并创建一个静态方法来完成对象的初始化

这样做的目的是:
    对象将在第一次调用时创建
    此后,这个类将返回同一个对象

实践:
    1.只允许Singleton类生成一个实例。
    2.如果已经有一个实例了  则重复提供同-个对象

class Singletion(object):
    def __new__(cls):
        '''
        覆盖 __new__方法,控制对象的创建
        '''
        if not hasattr(cls,'instance'):
            '''
            hasattr 用来了解对象是否具有某个属性
                检查 cls 是否具有属性 instance
                instance 属性的作用是检查该类是否已经生成了一个对象
            '''
            cls.instance = super(Singletion,cls).__new__(cls)
        '''
        当对象s1被请求创建时,hasattr发现对象已经存在
            对象s1将被分配到已有的对象实例
        '''
        return cls.instance

s = Singletion()
'''
s对象 通过 __new__ 方法进行创建
    在创建之前,会检查对象是否已存在
'''
print("对象已经创建好了:",s)

s1 = Singletion()
print("对象已经创建好了:",s1)

'''
运行结果:
对象已经创建好了: <__main__.Singletion object at 0x000001EE59F93340>
对象已经创建好了: <__main__.Singletion object at 0x000001EE59F93340>
'''

2020-05-09·