设计模式分类: 结构型 行为型 创建型
单例模式属于创建型设计模式 单例模式主要使用在 日志记录 ->将多项服务的日志信息按照顺序保存到一个特定日志文件 数据库操作 -> 使用一个数据库对象进行操作,保证数据的一致性 打印机后台处理程序 以及其他程序 该程序运行过程中 只能生成一个实例 避免对同一资源产生相互冲突的请求
单例设计模式的意图: 确保类有且只有一个对象被创建。 为对象提供一个访问点,以使程序可以全局访问该对象。 控制共享资源的并行访问
单例模式的 UML 图
实现单例模式的一个简单方法是: 使构造函数私有化 并创建一个静态方法来完成对象的初始化 这样做的目的是: 对象将在第一次调用时创建 此后,这个类将返回同一个对象
实践: 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·