#设计模式
#工厂模式:用类和对象模拟工厂生产汽车的模式
'''class BMW():
def __init__(self,name):
self.name=name
class Bonz():
def __init__(self,name):
self.name=name
class CarFatory():
@staticmethod
def makeCar(name):
if name=="宝马":
return BMW(name)
if name=="奔驰":
return Bonz(name)
car=CarFatory.makeCar("奔驰")
print(car.name,type(car))
car2=CarFatory.makeCar("宝马")
print(car2.name,type(car2))'''
# a=[1,2,3,4]
# def A(a):
# return a*a
# c=map(A,a)
# print(c)
# for i in c:
# print(i)
# a=[1,2,3]
# b="abcdef"
#
# c=zip(a,b)
# print(c)
# for i in c:
# print(i)
#
# def guoLu(f):
# return f%2==0
# a=[1,2,3,4,5,6]
# b=filter(guoLu,a)
# for i in b:
# print(i)
#观察者模式:用来模拟一对多的观察以及通讯任务
'''class Resi():
def __init__(self):
self.obs=[]
self.status=""
def attach(self,ob):
self.obs.append(ob)
def notify(self):
for x in self.obs:
x.update()
class Observe():
def __init__(self,name,resi):
self.name=name
self.resi=resi
def update(self):
print("%s,%s 请不要玩手机了"%(self.resi.status,self.name))
class Manager():
def __init__(self,name,boss):
self.name=name
self.boss=boss
def updata(self):
print("%s,%s请到北京饭店一聚"%(self.boss.status,self.name))
if __name__ == '__main__':
resi=Resi()
obj_zs=Observe("张三",resi)
obj_ls=Observe("李四",resi)
obj_ww=Observe("王五",resi)
m_qd=Observe("马强东",resi)
my=Observe("马云",resi)
resi.attach(obj_zs)
resi.attach(obj_ls)
resi.attach(obj_ww)
resi.attach(m_qd)
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.keys():
cs=zd[celue]
else:
cs=zd[1]
money=float(input("请输入钱:"))
print(cs.getResult(money))