1.設(shè)計模式
設(shè)計模式(Design pattern)代表了最佳的實(shí)踐尝蠕,通常被有經(jīng)驗的面向?qū)ο蟮能浖_發(fā)人員所采用血柳。
2.設(shè)計模式六大原則
(1):單一職責(zé)原則
即一個類只負(fù)責(zé)一項職責(zé)
(2):里氏替換原則
所有引用基類的地方必須能透明地使用其子類的對象
(3):依賴倒置原則
高層模塊不應(yīng)該依賴低層模塊,二者都應(yīng)該依賴其抽象难捌;抽象不應(yīng)該依賴細(xì)節(jié)膝宁;細(xì)節(jié)應(yīng)該依賴抽象。高內(nèi)聚根吁,低耦合员淫。
(4):接口隔離原則
客戶端不應(yīng)該依賴它不需要的接口击敌;一個類對另一個類的依賴應(yīng)該建立在最小的接口上。
(5):迪米特法則
一個對象應(yīng)該對其他對象保持最少的了解映皆。盡量降低類與類之間的耦合。
(6):開閉原則
一個軟件實(shí)體如類捅彻、模塊和函數(shù)應(yīng)該對擴(kuò)展開放,對修改關(guān)閉从隆。
3.分類是
1.創(chuàng)建型模式
主要目的:創(chuàng)建對象
共五種:工廠方法模式缭裆、抽象工廠模式、單例模式澈驼、建造者模式、原型模式挎塌。
2.結(jié)構(gòu)型模式
主要目的:對象的組成和對象的關(guān)系
共七種:適配器模式内边、裝飾器模式、代理模式漠其、外觀模式、橋接模式拴驮、組合模式柴信、享元模式莹汤。
3.行為型模式
主要目的:對象的行為颠印,對象能做什么
共十一種:策略模式、模板方法模式线罕、觀察者模式、迭代子模式喇闸、責(zé)任鏈模式、命令模式燃乍、備忘錄模式、狀態(tài)模式逗旁、訪問者模式舆瘪、中介者模式、解釋器模式英古。
4.工廠設(shè)計模式。
工廠類角色:這是本模式的核心膨桥,含有一定的商業(yè)邏輯和判斷邏輯唠叛,用來創(chuàng)建產(chǎn)品
抽象產(chǎn)品角色:它一般是具體產(chǎn)品繼承的父類或者實(shí)現(xiàn)的接口。
具體產(chǎn)品角色:工廠類所創(chuàng)建的對象就是此角色的實(shí)例玻墅。
首先定義一個Car父類壮虫,再定義一系列的車的型號,每一個型號都創(chuàng)建一個類剩拢,再創(chuàng)建一個Factory類饶唤。
見代碼01_簡單工廠化模式.py
class Car:
def run(self):
pass
def color(self):
pass
class H1(Car):
def run(self):
print('H1..........run.........fast.............')
def stop(self):
print('H1...........stop...................')
def city(self):
print('H1..................越野車................')
class H2(Car):
def run(self):
print('H2..........run.........fast.............')
def stop(self):
print('H2...........stop.....................')
def beautiful(self):
print('H2..................美麗的大車................')
class H3(Car):
def run(self):
print('H3..........run.........fast.............')
def stop(self):
print('H3...........stop.....................')
def large(self):
print('H3..................大車越野................')
class Factory:
@classmethod
def createCar(cls,name):
car=None
if name=='H1':
car=H1()
elif name=='H2':
car=H2()
elif name=='H3':
car=H3()
return car
def main():
typecar=input('請輸入你要購買車的型號:')
c1=Factory.createCar(typecar)
if c1==None:
print('沒有這樣的車')
else:
if type(c1)==H1:
c1.city()
elif type(c1)==H2:
c1.beautiful()
elif type(c1)==H3:
c1.large()
c1.run()
c1.stop()
main()
5.簡單的工廠化優(yōu)缺點(diǎn):
對象創(chuàng)建比較復(fù)雜的時候募狂,可以考慮使用簡單工廠模式。
優(yōu)點(diǎn):
在簡單工廠中主函數(shù)或者客戶端不再負(fù)責(zé)對象的創(chuàng)建性穿,而是把這個責(zé)任交給工廠類雷滚,主函數(shù)或者客戶端在使用對象的時候只從工廠中調(diào)用就行了,從而明確了各個類的職責(zé),符合單一職責(zé)原則)
缺點(diǎn)
由于這個工廠類負(fù)責(zé)所有對象的創(chuàng)建商源,那么當(dāng)子類增多時谋减,我們就需要去修改工廠類的代碼,這樣呢逃顶,就違反了一個原則:開閉原則
6.工廠方法模式。
由于這個工廠類負(fù)責(zé)所有對象的創(chuàng)建霸褒,那么當(dāng)子類增多時盈蛮,我們就需要去修改工廠類的代碼,這樣呢抖誉,就違反了一個原則:開閉原則
那怎么辦?
可以使用工廠方法模式
抽象工廠角色: 這是工廠方法模式的核心旁理,它與應(yīng)用程序無關(guān)我磁。是具體工廠角色必須實(shí)現(xiàn)的接口或者必須繼承的父類。
具體工廠角色:它含有和具體業(yè)務(wù)邏輯有關(guān)的代碼夺艰。由應(yīng)用程序調(diào)用以創(chuàng)建對應(yīng)的具體產(chǎn)品的對象。
抽象產(chǎn)品角色:它是具體產(chǎn)品繼承的父類或者是實(shí)現(xiàn)的接口减牺。
具體產(chǎn)品角色:具體工廠角色所創(chuàng)建的對象就是此角色的實(shí)例存谎。
見代碼 02_工廠方法模式.py
7.工廠方法模式的優(yōu)缺點(diǎn)
工廠方法模式的優(yōu)點(diǎn)和缺點(diǎn)
優(yōu)點(diǎn):
解決了簡單工廠模式的違反開閉原則
缺點(diǎn)
如果需要增加一個具體產(chǎn)品類角色,需要添加這個類和對應(yīng)的工廠類稚失。代碼量大固以。