首页 > 代码库 > Python的设计模式学习

Python的设计模式学习

1.工厂模式

#encoding=utf-8__author__ = kevinlu1010@qq.comclass ADD():    def getResult(self,*args):        return args[0]+args[1]class SUB():    def getResult(self,*args):        return  args[0]-args[1]class MUL():    def getResult(self,*args):        return  args[0]*args[1]class DIV():    def getResult(self,*args):        try:            return  args[0]/args[1]        except:return 0class UNKnow():    def getResult(self,op1,op2):        return unknowclass Factory():    Classes={+:ADD,-:SUB,*:MUL,/:DIV}    def getClass(self,key):        return self.Classes[key]() if key in self.Classes else  UNKnow()if __name__==__main__:    key=+    op1=91    op2=45    factory=Factory()    c=factory.getClass(key)    r=c.getResult(op1,op2)    print r

 

工厂模式会创建一个工厂类,该类会根据实例化时的输入参数返回相应的类。Factory这个类会根据输入的key,返回相应的加,减,乘或除类。

2.策略模式

 

#encoding=utf-8__author__ = kevinlu1010@qq.comclass Base():    def getPrice(self,price):        passclass Origin(Base):    def getPrice(self,price):        return priceclass Vip(Base):    def getPrice(self,price):        return price*0.8class Sale(Base):    def getPrice(self,price):        return price-price/100*20class Context():    def __init__(self,c):        self.c=c    def getPrice(self,price):        return self.c.getPrice(price)if __name__==__main__:    strategy={}    strategy[0]=Context(Origin())    strategy[1]=Context(Vip())    strategy[2]=Context(Sale())    price=485    s=2    price_last=strategy[s].getPrice(price)    print price_last

 

 

策略模式中,系统会根据不同的策略,返回不同的值,例如超市里面,会有不同的计价方法,例如普通客户会以原价来计价,vip会打八折,活动促销时满10020,这里就有三种策略,在系统中,输入原价和采取的策略方式,系统就会根据选择的策略,计算消费者最终需要支付的金额。策略模式与工厂模式类似,例如上面的例子也可以用工厂模式来实现,就是新建三个类,每个类都有一个计价的方法。而策略模式和工厂模式的区别是策略模式更适用于策略不同的情景,也就是类中的方法不同,而工厂模式更适合类不同的情景。

 

参考:http://www.cnblogs.com/wuyuegb2312/archive/2013/04/09/3008320.html