Java
MySQL
Python
大数据
前端
黑科技
    首页 > 互联网 > Python > python设计模式学习,工厂模式,策略模式,单例模式

python设计模式学习,工厂模式,策略模式,单例模式

[导读]:工厂模式 工厂模式会创建一个工厂类,该类会根据实例化时的输入参数返回相应的类。Factory这个类会根据输入的key,返回相应的加,减,乘或除类。 #encoding=utf-8 __author__=kevinlu1010qq.com classADD...
    工厂模式
 
    工厂模式会创建一个工厂类,该类会根据实例化时的输入参数返回相应的类。Factory这个类会根据输入的key,返回相应的加,减,乘或除类。
 
    #encoding=utf-8
    __author__='kevinlu1010qq.com'
    classADD():
    defgetResult(self,*args):
    returnargs[0]+args[1]
    classSUB():
    defgetResult(self,*args):
    returnargs[0]-args[1]
    classMUL():
    defgetResult(self,*args):
    returnargs[0]*args[1]
    classDIV():
    defgetResult(self,*args):
    try:
    returnargs[0]/args[1]
    except:return0
    classUNKnow():
    defgetResult(self,op1,op2):
    return'unknow'
    classFactory():
    Classes={'+':ADD,'-':SUB,'*':MUL,'/':DIV}
    defgetClass(self,key):
    returnself.Classes[key]()ifkeyinself.ClasseselseUNKnow()
    if__name__=='__main__':
    key='+'
    op1=91
    op2=45
    factory=Factory()
    c=factory.getClass(key)
    r=c.getResult(op1,op2)
    printr
 
    策略模式

    策略模式中,系统会根据不同的策略,返回不同的值,策略模式和工厂模式的区别是策略模式更适用于策略不同的情景,也就是类中的方法不同,而工厂模式更适合类不同的情景。
 
    #encoding=utf-8
    __author__='kevinlu1010@qq.com'
    classBase():
    defgetPrice(self,price):
    pass
    classOrigin(Base):
    defgetPrice(self,price):
    returnprice
    classVip(Base):
    defgetPrice(self,price):
    returnprice*0.8
    classSale(Base):
    defgetPrice(self,price):
    returnprice-price/100*20
    classContext():
    def__init__(self,c):
    self.c=c
    defgetPrice(self,price):
    returnself.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)
    printprice_last
    
    单例模式
 
    classSingleton(object):
    def__new__(type,*args,**kwargs):
    ifnot'_the_instance'intype.__dict__:
    type._the_instance=object.__new__(type,*args,**kwargs)
    returntype._the_instance
    classMySin(Singleton):
    b=0
    def__init__(self):
    printself.b
    ifnotself.b:self.b+=1
    printself.b
    self.a=[1]
    defchange(self):
    self.a.append(2)
    c1=MySin()
    c1.a.append(3)
    c2=MySin()
    printc1.a
    c1.change()
    printc2.a

本文来自投稿,不代表阿习进阶博客立场,如若转载,请注明出处:https://www.yanxias.com/Python/36.html

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!
点击这里给我发消息