二十三種設(shè)計(jì)模式-六大原則

二十三種設(shè)計(jì)模式

創(chuàng)建型:創(chuàng)建型模式爱榕,就是創(chuàng)建對(duì)象的模式弃舒,抽象了實(shí)例化的過程。
它幫助一個(gè)系統(tǒng)獨(dú)立于如何創(chuàng)建鸽粉、組合和表示它的那些對(duì)象斜脂。
關(guān)注的是對(duì)象的創(chuàng)建,創(chuàng)建型模式將創(chuàng)建對(duì)象的過程進(jìn)行了抽象触机,也可以理解為將創(chuàng)建對(duì)象的過程進(jìn)行了封裝秽褒,作為客戶程序僅僅需要去使用對(duì)象,而不再關(guān)心創(chuàng)建對(duì)象過程中的邏輯威兜。
創(chuàng)建型模式销斟,共五種:工廠方法模式、抽象工廠模式椒舵、單例模式蚂踊、建造者模式、原型模式笔宿。

結(jié)構(gòu)型:行為型模式是對(duì)在不同的對(duì)象之間劃分責(zé)任和算法的抽象化犁钟,行為型模式不僅僅關(guān)注類和對(duì)象的結(jié)構(gòu),而且重點(diǎn)關(guān)注他們之間的相互作用泼橘,通過行為型模式涝动,可以更加清晰地劃分類與對(duì)象的職責(zé),并研究系統(tǒng)在運(yùn)行時(shí)實(shí)例對(duì)象之間的交互炬灭。
行為型模式醋粟,共十一種:策略模式、模板方法模式重归、觀察者模式米愿、迭代子模式、責(zé)任鏈模式鼻吮、命令模式育苟、備忘錄模式、狀態(tài)模式椎木、訪問者模式违柏、中介者模式、解釋器模式香椎。

行為型:結(jié)構(gòu)型模式是為解決怎樣組裝現(xiàn)有的類漱竖,設(shè)計(jì)他們的交互方式,從而達(dá)到實(shí)現(xiàn)一定的功能士鸥。
結(jié)構(gòu)型模式闲孤,共七種:適配器模式、裝飾器模式、代理模式讼积、外觀模式肥照、橋接模式、組合模式勤众、享元模式舆绎。

六大原則

一、開放封閉(簡(jiǎn)稱開閉)原則
Open-Close Principle(OCP):一個(gè)軟件實(shí)體如類们颜、模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開放吕朵,對(duì)修改關(guān)閉。目的就是保證程序的擴(kuò)展性好窥突,易于維護(hù)和升級(jí)努溃。

開閉原則被稱為面向?qū)ο笤O(shè)計(jì)的基石,實(shí)際上阻问,其他原則都可以看作是實(shí)現(xiàn)開閉原則的工具和手段梧税。意思就是:軟件對(duì)擴(kuò)展應(yīng)該是開放的,對(duì)修改是封閉的称近,通俗來說就是第队,開發(fā)一個(gè)軟件時(shí),應(yīng)該對(duì)其進(jìn)行功能擴(kuò)展刨秆,而在進(jìn)行這些擴(kuò)展時(shí)凳谦,不需要對(duì)原來的程序進(jìn)行修改。

好處是:軟件可用性非常靈活衡未,擴(kuò)展性強(qiáng)尸执。需要新的功能時(shí),可以增加新的模塊來滿足新需求眠屎。另外由于原來的模塊沒有修改剔交,所以不用擔(dān)心穩(wěn)定性的問題肆饶。
二改衩、單一職責(zé)原則
Single-Responsibilitiy Principle(SRP):對(duì)一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因驯镊。如果存在多于一個(gè)動(dòng)機(jī)去改變一個(gè)類葫督,那么這個(gè)類就具有多于一個(gè)的職責(zé),就應(yīng)該把多余的職責(zé)分離出去板惑,再去創(chuàng)建一些類來完成每一個(gè)職責(zé)橄镜。

舉個(gè)例子:一個(gè)人身兼數(shù)職,而這些事情相關(guān)性不大冯乘,甚至有沖突洽胶,那他就無(wú)法很好的解決這些問題職責(zé),應(yīng)該分到不同的人身上去做裆馒。

單一職責(zé)原則是實(shí)現(xiàn)高內(nèi)聚低耦合的最好方法姊氓,沒有之一丐怯。
三、里氏代換原則
四翔横、依賴倒置原則
五读跷、接口隔離原則
接口隔離原則(Interface Segregation Principle):用于恰當(dāng)?shù)膭澐纸巧徒涌冢哂袃煞N含義:1禾唁、用戶不應(yīng)該依賴它不需要的借口效览;2、類間的依賴關(guān)系應(yīng)該建立在最小的的接口上荡短。

將這兩個(gè)定義概括為一句話:建立單一接口丐枉,代替龐大臃腫的接口。通俗來說就是:接口盡量細(xì)化掘托,同時(shí)保證接口中的方法盡量的少矛洞。一個(gè)接口中包含太多的行為時(shí),會(huì)導(dǎo)致它們與客戶端的不正常依賴關(guān)系烫映,要做的就是分離接口沼本,從而實(shí)現(xiàn)解耦。

回到上述的單一職責(zé)原則锭沟,要求行為分離接口接口細(xì)化抽兆,感覺有些相同。但實(shí)際上族淮,單一職責(zé)原則要求類與接口的職責(zé)單一辫红,注重的是職責(zé),沒有要求接口盡量的少祝辣。

在接口隔離原則中贴妻,要求盡量使用多個(gè)專門的接口。專門的接口也就是提供給多個(gè)模塊的接口蝙斜。提供給幾個(gè)模塊就應(yīng)該有幾個(gè)接口名惩,而不是建立一個(gè)臃腫龐大的接口,所有的模塊都可以訪問孕荠。

但是接口的設(shè)計(jì)是有限度的娩鹉。接口的設(shè)計(jì)粒度越小系統(tǒng)越靈活,這是事實(shí)稚伍,但是接口太多這也就使得結(jié)構(gòu)復(fù)雜弯予,維護(hù)難度大。因此實(shí)際中个曙,怎樣把握就靠開發(fā)的經(jīng)驗(yàn)和常識(shí)了锈嫩。
六、迪米特原則
Law of Demeter(最小知識(shí)原則):一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象有最少的了解。通俗來說就是呼寸,一個(gè)類對(duì)自己需要耦合或者調(diào)用的類知道的最少那槽,你類內(nèi)部怎么復(fù)雜,我不管等舔,那是你的事骚灸,我只知道你有那么多公用的方法,我能調(diào)用慌植。

迪米特原則不希望類與類之間建立直接的接觸甚牲。如果真的需要有聯(lián)系,那么就通過它們的友元類來傳達(dá)蝶柿。舉例來說:你需要買房子了丈钙,現(xiàn)在存在三座合適的樓盤A,B交汤,C雏赦,但是你不必直接去樓盤買樓,而是在售樓處去了解情況芙扎。這樣就減少了你(購(gòu)房者)與樓盤兩個(gè)類之間耦合星岗。

但是應(yīng)用迪米特原則很可能會(huì)造成一個(gè)后果:系統(tǒng)會(huì)存在大量的中介類,這些類(如上面的售樓處類)之所以存在是為了傳遞類之間的相互調(diào)用關(guān)系戒洼,這就一定會(huì)程度上增加了系統(tǒng)的復(fù)雜度俏橘。

迪米特原則核心觀念就是:類間解耦,弱耦合圈浇。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末寥掐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子磷蜀,更是在濱河造成了極大的恐慌召耘,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褐隆,死亡現(xiàn)場(chǎng)離奇詭異污它,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)妓灌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門轨蛤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人虫埂,你說我怎么就攤上這事∑匝椋” “怎么了掉伏?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我斧散,道長(zhǎng)供常,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任鸡捐,我火速辦了婚禮栈暇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘箍镜。我一直安慰自己源祈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布色迂。 她就那樣靜靜地躺著香缺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歇僧。 梳的紋絲不亂的頭發(fā)上图张,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音诈悍,去河邊找鬼祸轮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛侥钳,可吹牛的內(nèi)容都是我干的倔撞。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼慕趴,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼痪蝇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起冕房,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤躏啰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后耙册,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體给僵,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年详拙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帝际。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饶辙,死狀恐怖蹲诀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情弃揽,我是刑警寧澤脯爪,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布则北,位于F島的核電站,受9級(jí)特大地震影響痕慢,放射性物質(zhì)發(fā)生泄漏尚揣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一掖举、第九天 我趴在偏房一處隱蔽的房頂上張望快骗。 院中可真熱鬧,春花似錦塔次、人聲如沸方篮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)恭取。三九已至,卻和暖如春熄守,著一層夾襖步出監(jiān)牢的瞬間蜈垮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工裕照, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留攒发,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓晋南,卻偏偏與公主長(zhǎng)得像惠猿,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子负间,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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