python设计模式学习,工厂模式,策略模式,单例模式-Python-E先生的博客
Java
MySQL
大数据
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

本文来自E先生的博客,如若转载,请注明出处:https://www.javajz.cn

留言区

联系人:
手   机:
内   容:
验证码:

历史留言

欢迎加Easy的QQ