赞
踩
本节书摘来自华章出版社《Python编程实战:运用设计模式、并发和程序库创建高质量程序》一 书中的第1章,第1.1节,作者:(美) Mark Summerfield,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
在整个程序运行过程中,如果某个类只应该有一个实例,那么可通过单例模式来保证。
有些面向对象编程语言很难创建单例,但在Python语言中却非常简单。Python Cookbook(code.activestate.com/recipes/langs/python/)提供了非常易用的Singleton类,只要继承它,就会成为单例。此外还提供了Borg类,可以用另一种方式实现单例效果。
然而在Python中实现单例最为简单的办法是:创建模块时,把全局状态放在私有变量中,并提供用于访问此变量的公开函数。比方说,在第7章的currency范例中,我们要创建一个函数,令其返回含有货币汇率的字典(该字典以货币名称为键,以汇率为值)。这个函数可能会调用很多次,但大部分情况下,汇率数据只获取一次就够了,无须每次调用时都获取一遍。此需求可以通过单例模式来实现。
这段代码节选自currency/Rates.py模块(与往常一样,节选代码时也略去了import语句)。我们创建了名为rates的字典,用于保存私有数据,并将该字典设置成Rates.get()函数的属性。第一次执行公开的get()函数时(或者以refresh=True为参数调用时),会下载全新的汇率数据;其他时候只需把最近下载的那份数据返回就行了。尽管没有引入类,但我们依然把汇率数据做成了“单例数据值”(singleton data value),若要添加其他单例值,亦可仿照此法。
创建型设计模式在Python语言中都很容易实现。单例模式可以直接用模块来实现,而原型模式则显得多余,尽管也可以通过copy模块来实现,但Python语言能够动态访问类对象,所以没必要那么做。最有用的创建型设计模式是抽象工厂模式、工厂方法模式与建造者模式,它们的实现方式有很多种。创建好基本的对象之后,一般需要通过组合或适配来创建更为复杂的对象。下一章就来谈谈这个问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。