单例模式:一个来自“四人帮”著作中的“创造模式”
Gang of Four (GOF):设计模式四人组(“四人帮”,又称Gang of Four,即Erich Gamma, Richard Helm, Ralph Johnson & John Vlissides四人)的《设计模式》,原名《Design Patterns: Elements of Reusable Object-Oriented Software》(1995年出版,出版社:Addison Wesly Longman.Inc),第一次将设计模式提升到理论高度,并将之规范化。
结论
Python程序员几乎从不会像“四人帮”著作中所描述的那样来实现单例模式,其单例类禁止正常的实例化,而是提供一个返回单例实例的类方法。Python更加优雅,它允许类继续支持用于实例化的常规语法,同时定义一个返回单例实例的自定义的__new__()方法。但是,如果你的设计强制要求你提供对单例对象的全局访问,那么一个更python化的方法是使用全局对象模式代替。
解疑
在面向对象设计模式社区定义“单例模式”之前,Python就已经在使用术语singleton了。因此,我们应该首先从区分Python中“singleton”的几个含义开始。
长度为1的元组称为一个单例。虽然这个定义可能会让一些程序员感到惊讶,但它反映了数学中单例的原始定义:一个只包含一个元素的集合。Python教程本身介绍了这个定义的新成员,在其关于数据结构的章节中,将单元素元组称为一个“单例”,并且在Python文档的其他部分中,这个词仍然以这个意思来使用。当《扩展和嵌入指南》中写到,“使用一个参数去调用Python函数…传递一个单例元组”时,这意味着它是只包含一个项的元组。
模块在Python中是“单例”,因为import只创建每个模块的一个单独副本;同名的后续导入将不断返回相同的模块对象。例如,当Python/C API参考手册的模块对象一章断言“Single-phase初始化会创建单例模块”时,它的意思是一个“单例模块”,即一个只有一个对象会为