python设计模式1:创建型模式
2015-10-07 12:34
561 查看
1.原型模式
如果想根据现有的对象复制出新的对象并进行修改,可以考虑“原型模式”,而无需知道任何创建细节。(有点像写轮眼...你不需要知道它)
2.单例模式
如果在整个程序运行过程中,某个类只应该有一个实例,那么可通过单例模式来保证。有一种实现单例模式比较简单的办法是:创建模块时,把全局状态放在私有变量中,并提供用于访问此变量的公开函数。
举个例子,如果我们要实现一个功能,这个功能可以返回含有货币汇率的字典键值对。那么有两种办法可以实现:
(1)每次调用时先创建字典,然后读取文件,从字典取出值。
(2)加一个判断的flag,保证在同一个单例下,第一次把字典创建好,以后直接从字典里取值。
明显(2)好于(1)
to be continue...
如果想根据现有的对象复制出新的对象并进行修改,可以考虑“原型模式”,而无需知道任何创建细节。(有点像写轮眼...你不需要知道它)
import copy class Point: __slots__ = ("x","y") def __init__(self,x,y): self.x = x self.y = y point1 = Point(1,2) point2 = copy.deepcopy(point1) print(point2.x) point2.x = 3 print(point2.x) #answer:1,3
2.单例模式
如果在整个程序运行过程中,某个类只应该有一个实例,那么可通过单例模式来保证。有一种实现单例模式比较简单的办法是:创建模块时,把全局状态放在私有变量中,并提供用于访问此变量的公开函数。
举个例子,如果我们要实现一个功能,这个功能可以返回含有货币汇率的字典键值对。那么有两种办法可以实现:
(1)每次调用时先创建字典,然后读取文件,从字典取出值。
(2)加一个判断的flag,保证在同一个单例下,第一次把字典创建好,以后直接从字典里取值。
明显(2)好于(1)
import urllib _URL = "http://www.banlofcanada.ca/stats/assets/csv/fx-seven-day.csv" def get(refresh=False): if refresh: get.rates = {} if get.rates: return get.rates with urllib.request.urlopen(_URL) as file: for line in file: line = line.rstrip().decode("utf-8") if not line or line.startswith(("#","Date")): continue name,currency,*rest = re.split(r"\s*,\s*",line) key = "{} ({})".format(name,currency) try: get.rates[key] = float(rest[-1]) except ValueError as err: print("error {}: {}".format(err,line)) return get.rates get.rates={}
to be continue...
相关文章推荐
- 6.Python补充_Python之道
- 5.Python补充_字符串格式化 (%操作符)
- 4.Python补充_Python简史
- windows下使用cx_freeze将Python程序打包成exe可执行文件
- Python 全局变量的使用
- 【Python】Learn Python the hard way, ex13 传递参数
- Python 3.0 和 2.X的简单区别
- Python的ipython的安装
- 【Python】Learn Python the hard way, ex12 raw_input 提示别人
- python 如何找到某一目录下的文件类型(三种方法)
- 【Python】Learn Python the hard way, ex11 raw_input
- 【Python】Learn Python the hard way, ex10 转义字符
- 【Python】Learn Python the hard way, ex9 换行符,打印多行字符
- Python的Set和List的性能比较 + 两者之间的转换
- Python 将一个目录下的所有word文档转为txt
- 如何查询python帮助文档;sublime 快捷键
- Python 集合set添加删除、交集、并集、集合操作符号
- 之前写的python文件
- python文本处理
- 【Python】Learn Python the hard way, ex8 格式化字符串