python设计模式1:创建型模式

1.原型模式

如果想根据现有的对象复制出新的对象并进行修改,可以考虑“原型模式”,而无需知道任何创建细节。(有点像写轮眼...你不需要知道它)

复制代码
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={}
复制代码

 

原文链接:http://www.cnblogs.com/alexkn/p/4858533.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值