設(shè)計模式(1)—什么是設(shè)計模式氯庆?設(shè)計模式的六大原則是什么蹭秋?

只有登上山頂,才能看到那邊的風(fēng)光

目錄

1.什么設(shè)計模式

2.設(shè)計模式的發(fā)展

3.設(shè)計原則6大原則

3.1 開閉原則

3.2? 里氏轉(zhuǎn)換原則

3.3 依賴倒轉(zhuǎn)原則

3.4? 接口隔離原則

3.5 合成/聚合復(fù)用原則?

3.6 迪米特原則

1.什么設(shè)計模式

軟件設(shè)計模式(Design pattern)堤撵,又稱設(shè)計模式仁讨,是一套被反復(fù)使用、多數(shù)人知曉的实昨、經(jīng)過分類編目的洞豁、代碼設(shè)計經(jīng)驗的總結(jié)。使用設(shè)計模式是為了可重用代碼、讓代碼更容易被他人理解丈挟、保證代碼可靠性刁卜、程序的重用性。設(shè)計模式使代碼開發(fā)真正工程化礁哄;設(shè)計模式是軟件工程的基石脈絡(luò)长酗,如同大廈的結(jié)構(gòu)一樣。只有夯實地基搭好結(jié)構(gòu)桐绒,才能蓋好堅壯的大樓夺脾。也是我們邁向高級開發(fā)人員必經(jīng)的一步。即12字真言:設(shè)計模式是設(shè)計經(jīng)驗的總結(jié)

2.設(shè)計模式的發(fā)展

說起設(shè)計模式的發(fā)展茉继,還要從四個男人的故事(注意此處沒有女人)開始說起咧叭,這四個男人分別是 Erich Gamma, Richard Helm烁竭,Ralph Johnson菲茬,和John Vlissides,他們是軟件設(shè)計領(lǐng)域的四位世界頂級大師派撕,那軟件設(shè)計水平真是不知道高到哪里去了婉弹,反正我是自愧不如。這四位大佬合著了一本書《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》终吼, 提出了23種基本設(shè)計模式镀赌,從理論高度提煉并規(guī)范了設(shè)計模式,對面向?qū)ο笤O(shè)計际跪,軟件復(fù)用領(lǐng)域產(chǎn)生了巨大影響∩谭穑現(xiàn)在設(shè)計模式已經(jīng)被應(yīng)用到各種各樣的編程語言中,不管是后端的Java姆打,C#還是前端的JavaScript, 你都能看到它的身影良姆,設(shè)計模式最大的魅力在于,不管在那種編程語言中幔戏,它思想和表現(xiàn)都是一樣的玛追,只是代碼語法略有不同而已。

3.設(shè)計模式6大原則

設(shè)計模式存在的根本原因是為了更好地復(fù)用代碼评抚,增加代碼可維護性豹缀。

所以有如下6大原則:

?3.1 開閉原則

?對擴展開放,對修改關(guān)閉慨代,?即在程序需要進行拓展的時候,不能去修改原有的代碼啸如,只能增加新的代碼侍匙。

這樣的例子在我們的生活中隨處可見,比如在各種選秀比賽里,如果兩個選手在比賽中打成了平手想暗,我們不可能說通過穿越到過去妇汗,去改變過去的結(jié)果,讓他們不打成平手说莫,這是不可能實現(xiàn)的杨箭。但是我們可以通過添加附加的比賽,決定他們的勝負储狭。即已經(jīng)發(fā)生的已經(jīng)不可以改變 互婿,我們只能改變那些事情對現(xiàn)在的影響。

3.2? 里氏轉(zhuǎn)換原則

子類繼承父類辽狈,任何基類出現(xiàn)的地方慈参,一定可以用子類替代出現(xiàn)。

這怎么理解呢刮萌?比如說你的朋友u盤A中有一些小電影驮配,一天你們像往常一樣,把u盤A插入電腦準(zhǔn)備一起欣賞小電影着茸,卻發(fā)現(xiàn)u盤A壞了壮锻。這給正在興致勃勃的你們頓時澆了一盆涼水,這時候你靈機一動說涮阔,幸好老子有備份猜绣。原來之前你已經(jīng)把朋友u盤A中的小電影復(fù)制到了你的 u盤B中,而且你的u盤B中除了從朋友哪兒復(fù)制的小電影澎语,還有一些其它不可描述的內(nèi)容途事,這時候你有點猶豫要不要用自己的U盤B,看著正在興頭上的朋友擅羞,你一咬牙一跺腳說算了尸变,不管那么多了,淦减俏。于是你拔下朋友的u盤A插入自己的u盤B召烂,順利打開電影,于是你們又興致勃勃的觀看起來娃承。即子類是對父類的完全復(fù)制奏夫,父類可以被子類完全替代,子類可以增加新的內(nèi)容历筝,而且不影響父類酗昼。

3.3 依賴倒轉(zhuǎn)原則

?引用一個對象,如果這個對象有底層類型梳猪,直接引用底層類型麻削。

說到這里不得不吐槽一些博客的博主,好歹也是寫代碼的,寫博客的時候真沒有一點設(shè)計模式的原則呛哟。前幾天在網(wǎng)上搜一個問題叠荠,打開一看給我貼了一個另外博客的鏈接,打開這個鏈接之后又貼了另外一個博客的鏈接扫责。榛鼎。。鳖孤。者娱。。淌铐,你引用別人的博客我不反對肺然,你這引用引用的博客就過分了吧。? 總結(jié)一句話:引用的時候禁止套娃腿准,直接引用最底層的類型际起。

3.4? 接口隔離原則

使用多個隔離的接口,比使用單個接口要好吐葱,每一個接口應(yīng)該是一種角色街望。

比如我們的電腦上有多種不同類型的接口,像USB接口弟跑,電源接口灾前,高清輸出接口等等,它們各自有著不同的功能孟辑,那么為什么不用一個接口完成所有的功能呢哎甲,這是因為不同的設(shè)備,有不同的數(shù)據(jù)規(guī)格饲嗽,而且數(shù)據(jù)帶寬需求也是是不同的炭玫,讓他們都使用同一個接口是不科學(xué)的,這從usb與hdmi設(shè)備的使用環(huán)境就能看出來差別貌虾。但你也不能每個設(shè)備都分一個接口吞加,這是不現(xiàn)實的,應(yīng)該把統(tǒng)一數(shù)據(jù)規(guī)格的設(shè)備分為一個接口尽狠,例如USB接口可以同時支持衔憨,鼠標(biāo)鍵盤和U盤。即使用多個接口袄膏,比使用單個接口要好践图,但是小得要有限度。

3.5 ?合成/聚合復(fù)用原則?

新的對象應(yīng)使用一些已有的對象沉馆,使之成為新對象的一部分平项。

舉個例子:周末天氣晴朗赫舒,你和好朋友約好一起去爬山(不是張東升的那種爬山)悍及,這時候就需要有一個相機闽瓢,但是不巧的是你的相機壞了,于是你就拿著相機來到了修理店心赶。老板告訴你有一個零件壞了扣讼,問你是要更換零件,還是再買一個新的呢缨叫?你心里MMP了一句對老板說椭符,當(dāng)然是更換零件了,我這相機才買沒多久還新著呢耻姥。即用已經(jīng)有的東西合成新的東西销钝,使原來的東西成為新東西的一部分。

3.6 迪米特原則

?一個實體應(yīng)當(dāng)盡量少的與其他實體之間發(fā)生相互作用琐簇,使得系統(tǒng)功能模塊相對獨立蒸健,即一個對象應(yīng)對其他對象有盡可能少的了解。

這里的對象可以理解為對象(女朋友)婉商,假如你是一個時間管理大師似忧,同時交往了多個對象,當(dāng)然由于身經(jīng)百戰(zhàn)丈秩,你對這些對象應(yīng)付自如盯捌,不像我們這些老實人,一個都應(yīng)付不來蘑秽。但是這是你的小秘密饺著,為了不讓她們發(fā)現(xiàn)這個秘密,你就應(yīng)該使這些對象之間應(yīng)該盡可能少的了解肠牲,甚至完全不了解幼衰,如果她們之間了解過多,在相互八卦或者看朋友圈的時候埂材,發(fā)現(xiàn)了你的這個小秘密塑顺,那可是要出大事情的(喜歡多人運動的除外)。即多個對象之間應(yīng)該盡量避免有任何關(guān)聯(lián)俏险。

本文只對設(shè)計模式進行了簡單的介紹严拒,有些例子可能也不太合適。如果想對設(shè)計模式有更多的了解竖独,推薦看上文中四位大佬的那本書:《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》裤唠。

原創(chuàng)不易,如果覺得不錯的話歡迎關(guān)注莹痢,轉(zhuǎn)發(fā)种蘸,感謝墓赴!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市航瞭,隨后出現(xiàn)的幾起案子诫硕,更是在濱河造成了極大的恐慌,老刑警劉巖刊侯,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件章办,死亡現(xiàn)場離奇詭異,居然都是意外死亡滨彻,警方通過查閱死者的電腦和手機藕届,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亭饵,“玉大人休偶,你說我怎么就攤上這事」佳颍” “怎么了踏兜?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長只冻。 經(jīng)常有香客問我庇麦,道長,這世上最難降的妖魔是什么喜德? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任山橄,我火速辦了婚禮,結(jié)果婚禮上舍悯,老公的妹妹穿的比我還像新娘航棱。我一直安慰自己,他們只是感情好萌衬,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布饮醇。 她就那樣靜靜地躺著,像睡著了一般秕豫。 火紅的嫁衣襯著肌膚如雪朴艰。 梳的紋絲不亂的頭發(fā)上木柬,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天右莱,我揣著相機與錄音,去河邊找鬼响谓。 笑死歌径,一個胖子當(dāng)著我的面吹牛毁嗦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播回铛,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼狗准,長吁一口氣:“原來是場噩夢啊……” “哼克锣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起腔长,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤袭祟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后饼酿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榕酒,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年故俐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片紊婉。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡药版,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出喻犁,到底是詐尸還是另有隱情槽片,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布肢础,位于F島的核電站还栓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏传轰。R本人自食惡果不足惜剩盒,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望慨蛙。 院中可真熱鬧辽聊,春花似錦、人聲如沸期贫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽通砍。三九已至玛臂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間封孙,已是汗流浹背迹冤。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留敛瓷,地道東北人叁巨。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像呐籽,于是被迫代替她去往敵國和親锋勺。 傳聞我的和親對象是個殘疾皇子蚀瘸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345