python設(shè)計模式

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)的工廠類稚失。代碼量大固以。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嘱巾,一起剝皮案震驚了整個濱河市诫钓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌问拘,老刑警劉巖惧所,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纽绍,居然都是意外死亡势似,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門障簿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來栅迄,“玉大人,你說我怎么就攤上這事毅舆。” “怎么了污淋?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵余掖,是天一觀的道長礁鲁。 經(jīng)常有香客問我,道長冗美,這世上最難降的妖魔是什么析二? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任节预,我火速辦了婚禮属韧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宵喂。我一直安慰自己,他們只是感情好拙泽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布裸燎。 她就那樣靜靜地躺著,像睡著了一般朋其。 火紅的嫁衣襯著肌膚如雪脆炎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天袱蚓,我揣著相機(jī)與錄音几蜻,去河邊找鬼。 笑死梭稚,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的忱屑。 我是一名探鬼主播暇昂,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼从铲!你這毒婦竟也來了澄暮?” 一聲冷哼從身側(cè)響起阱扬,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤伸辟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后自娩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脐彩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年惠奸,在試婚紗的時候發(fā)現(xiàn)自己被綠了恰梢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡嗅回,死狀恐怖摧茴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情苛白,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布懂版,位于F島的核電站躏率,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏禾锤。R本人自食惡果不足惜摹察,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望黄娘。 院中可真熱鬧,春花似錦逼争、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至观话,卻和暖如春越平,著一層夾襖步出監(jiān)牢的瞬間频蛔,已是汗流浹背秦叛。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工挣跋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浆劲。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像度气,于是被迫代替她去往敵國和親膨报。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 設(shè)計模式是什么院领?設(shè)計模式是經(jīng)過總結(jié)够吩、優(yōu)化的,對我們經(jīng)常會碰到的一些編程問題的可重用解決方案周循。一個設(shè)計模式并不像一個...
    靜熙老師哈哈哈閱讀 559評論 0 7
  • 學(xué)完編程語言的語法和函數(shù)庫,只是程序設(shè)計學(xué)習(xí)的第一步饮怯,這并不意味著就能夠動手寫出好程序了。就像我們學(xué)習(xí)寫文章一樣蓖墅,...
    1angxi閱讀 1,169評論 0 18
  • 1設(shè)計模式 設(shè)計模式(Design pattern)代表了最佳的實(shí)踐论矾,通常被有經(jīng)驗的面向?qū)ο蟮能浖_發(fā)人員所采用。...
    五行缺覺閱讀 297評論 0 1
  • 工作時間一長迂曲,需求多而雜,往往難得有時間去仔細(xì)思量代碼如何寫的更加優(yōu)雅路捧,習(xí)慣使然传黄。設(shè)計模式本身不是一個神秘的東西,...
    __七把刀__閱讀 1,279評論 0 5
  • 建造者模式 想象一下膘掰,我們想要創(chuàng)建一個由多個部分構(gòu)成的對象,而且它的構(gòu)成需要一步接一步地完成凡伊。只有當(dāng)各個部分都創(chuàng)建...
    英武閱讀 2,200評論 1 50