設計模式的幾種用法

2021-09-12 14:39:12 字數 2868 閱讀 9850

#設計模式

#工廠模式:用類和物件模擬工廠生產汽車的模式

'''class bmw():

def __init__(self,name):

self.name=name

class bonz():

def __init__(self,name):

self.name=name

class ca***tory():

@staticmethod

def makecar(name):

if name=="寶馬":

return bmw(name)

if name=="賓士":

return bonz(name)

car=ca***tory.makecar("賓士")

print(car.name,type(car))

car2=ca***tory.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):

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

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))

設計模式的幾種原則

一.黎克特制代換原則 定義 子型別必須能夠替換它們的父型別。dh 解釋 也就是說,在軟體裡面,把父類都替換成子類,程式的行為沒有變化。也只有這樣父類才能真正被復用,而子類也能夠在父類的基礎上增加新的行為。這個原則是對繼承的乙個約束,也就是說,繼承中子類嚴格滿足 is a 的關係。所以,當你看到乙個繼...

常見的幾種設計模式

保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點 public class lazyman2 提供對外方法 public static lazyman2 getinstance return singleton 使用乙個工廠類來專門生產物件,使用者只是關心產品,不用關心建立過程 public ...

設計模式的幾種原則

一.黎克特制代換原則 定義 子型別必須能夠替換它們的父型別。dh 解釋 也就是說,在軟體裡面,把父類都替換成子類,程式的行為沒有變化。也只有這樣父類才能真正被復用,而子類也能夠在父類的基礎上增加新的行為。這個原則是對繼承的乙個約束,也就是說,繼承中子類嚴格滿足 is a 的關係。所以,當你看到乙個繼...