class A():
def __new__(cls, *args, **kwargs):
if not hasattr(cls,"instance"):
cls.instance = object.__new__(cls)
return cls.instance
def __init__(self,num):
self.num = num
a = A(5)
b = A(6)
print(a is b) # True
print(a.num) # 6
print(b.num) # 6
工厂模式
class Bmw():
def say(self):
print("这是一辆宝马")
class Benchi():
def say(self):
print("这是一辆奔驰")
class Car():
@classmethod
def abc(cls,name):
if name == "宝马":
return Bmw()
elif name == "奔驰":
return Benchi()
a = Car.abc("宝马")
b = Car.abc("奔驰")
a.say() # 这是一辆宝马
b.say() # 这是一辆奔驰
观察者模式
class Boss():
def __init__(self):
self.obList = []
self.msg = ""
def attach(self,obj):
self.obList.append(obj)
def notify(self):
for obj in self.obList:
obj.update()
class Market():
def __init__(self,name,boss):
self.name = name
self.boss = boss
def update(self):
print("市场部的{}您好,{}".format(self.name,self.boss.msg))
class Tech():
def __init__(self,name,boss):
self.name = name
self.boss = boss
def update(self):
print("技术部的{}您好,{}".format(self.name,self.boss.msg))
boss = Boss()
zs = Market("张三", boss)
ls = Market("李四", boss)
ww = Tech("王五", boss)
boss.attach(zs)
boss.attach(ls)
boss.attach(ww)
boss.msg = "下午开会"
boss.notify()
# 运行结果
# 市场部的张三您好,下午开会
# 市场部的李四您好,下午开会
# 技术部的王五您好,下午开会
策略模式
class CashNormal():
def getCashMoney(self, money):
return money
class CashRate():
def __init__(self, rate):
self.rate = rate
def getCashMoney(self, money):
return money*self.rate
class CashReturn():
def __init__(self, moneyCondition, moneyReturn):
self.moneyCondition = moneyCondition
self.moneyReturn = moneyReturn
def getCashMoney(self, money):
if money > self.moneyCondition:
return money - (money//self.moneyCondition)*self.moneyReturn
return money
class Oper():
def __init__(self, cash):
self.cash = cash
def getCash(self, money):
return self.cash.getCashMoney(money)
cashNormal = CashNormal()
cashRate = CashRate(0.8)
cashReturn = CashReturn(400,50)
a = Oper(cashNormal)
b = Oper(cashRate)
c = Oper(cashReturn)
money = int(input("请输入钱数"))
cl = int(input("请输入方案"))
if n == 1:
print(a.getCash(money))
elif n == 2:
print(b.getCash(money))
elif n == 3:
print(c.getCash(money))