只有登上山頂,才能看到那邊的風(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ā)种蘸,感謝墓赴!