Python基础-工厂/观察者/策略模式

工厂模式

class BMW():
    def __init__(self,name):
        self.name=name
class Benz():
    def __init__(self,name):
        self.name=name
class CarFactory():
    @staticmethod
    def makeCar(name):
        if name=='宝马':
            return BMW(name)
        elif name=='奔驰':
            return Benz(name)
car=CarFactory.makeCar('奔驰')
print(car.name,type(car))
car2=CarFactory.makeCar('宝马')
print(car2.name,type(car2))

抽象方法,不能实例化

from abc import ABC,abstractclassmethod,abstractmethod,abstractstaticmethod
class Dog(ABC):
    @abstractclassmethod
    def clMethod(self):
        pass
    @abstractmethod
    def mMethod(self):
        pass
    @abstractstaticmethod
    def stMethod(self):
        pass
d=Dog()

zip,map,filter的使用

a=[1,2,3]
b='abd'
c=zip(a,b)
print(c)
for x in c:
    print(x)

def deal(a):
    return a*a
b=[1,2,3,4]
c=map(deal,b)
print(c)
for x in c:
    print(x)

def dex(a):
    return a%2==1
h=[1,2,3,4,5,6,7]
b=filter(dex,h)
print(b)
for x in b:
    print(x)

观察者模式

class Resi():
    def __init__(self):
        self.obsv=[]
        self.status=''
    def attach(self,ob):
        self.obsv.append(ob)
    def notify(self):
        for x in self.obsv:
            x.update()
class Observe():
    def __init__(self,name,rs):
        self.name=name
        self.rs=rs
    def update(self):
        print('%s %s请不要玩游戏了'%(self.rs.status,self.name))
class Manager():
    def __init__(self,name,boss):
        self.name=name
        self.boss=boss
    def update(self):
        print('%s %s请到北京饭店一起聚会'%(self.boss.status,self.name))
if __name__ == '__main__':
    resi=Resi()
    obj_zs=Observe('张三',resi)
    obj_ls=Observe('李四',resi)
    obj_xh=Observe('小红',resi)
    lqd=Manager('刘强东',resi)
    my=Manager('马云',resi)
    resi.attach(obj_zs)
    resi.attach(obj_ls)
    resi.attach(obj_xh)
    resi.attach(lqd)
    resi.attach(my)
    resi.status='老板来了'
    resi.notify()

策略模式

class CashNormal():
    def accept_money(self,money):
        return money
class CashRate():
    def __init__(self,rate):
        self.rate=rate
    def accept_money(self,money):
        return money*self.rate
class CashReturn():
    def __init__(self,condition,ret):
        self.condition=condition
        self.ret=ret
    def accept_money(self,money):
        return money-(money//self.condition)*self.ret
class Context():
    def __init__(self,cs):
        self.cs=cs
    def getResult(self,money):
        return self.cs.accept_money(money)
if __name__ == '__main__':
    zd={}
    zd[1]=Context(CashNormal())
    zd[2]=Context(CashRate(0.8))
    zd[3]=Context(CashReturn(300,50))
    celue=int(input('请输入策略'))
    if celue in zd:
        cs=zd[celue]
    else:
        cs=zd[1]
    money=float(input('请输入钱'))
    print(cs.getResult(money))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值