面向?qū)ο?OO)原則&設(shè)計(jì)模式

image.png

一、面向?qū)ο?OO)原則

面向?qū)ο驩O七大原則為:

1.單一職責(zé)原則(Single Responsibility Principle)

  • 一個(gè)類或者方法只負(fù)責(zé)一個(gè)功能點(diǎn)
  • 對(duì)一個(gè)類來(lái)說(shuō)裁替,應(yīng)該僅有一個(gè)引起它變化的原因
  • 單一職責(zé)原則既簡(jiǎn)單也難運(yùn)用,簡(jiǎn)單是它易于理解摧玫,一個(gè)類(大到模塊,小到方法)承擔(dān)的職責(zé)越多蚊伞,被復(fù)用的可能性就越低席赂,耦合度就高,一個(gè)職責(zé)變化會(huì)影響其它職責(zé)时迫。難運(yùn)用因?yàn)槁氊?zé)的界限比較難劃分,跟實(shí)際所處環(huán)境和背景相關(guān)谓晌。

2.開(kāi)閉原則(Open Close Principle)

  • 對(duì)擴(kuò)展開(kāi)放掠拳,對(duì)修改關(guān)閉; 系統(tǒng)中的模塊纸肉、類或者方法對(duì)提供者(開(kāi)發(fā)者)是開(kāi)放的溺欧,可以對(duì)現(xiàn)有系統(tǒng)功能進(jìn)行擴(kuò)展(新增)功能, 系統(tǒng)中的模塊柏肪、類或者方法對(duì)使用者(調(diào)用者)是關(guān)閉的姐刁,使用者不用因?yàn)樘峁┓叫略龉δ芏鴮?dǎo)致使用者要跟著修改,擴(kuò)展和新增功能不直接修改已有代碼

  • 當(dāng)需求發(fā)生變化時(shí)烦味,應(yīng)該通過(guò)增加新的代碼來(lái)擴(kuò)展現(xiàn)有功能聂使,而不是直接修改已有代碼

3.里氏替換原則(Liskov Substitution Principle)

  • 將一個(gè)父類對(duì)象替換成它的子類對(duì)象后,不會(huì)影響程序的執(zhí)行結(jié)果
  • 簡(jiǎn)單來(lái)說(shuō)谬俄,子類可以擴(kuò)展父類的功能柏靶,但不能改變父類的原來(lái)的功能(盡量不要重寫父類方法)

(1)優(yōu)點(diǎn)

  • 代碼復(fù)用,子類擁有父類的方法和屬性

(2)缺點(diǎn)

  • 繼承是侵入性溃论,降低代碼靈活性屎蜓,一旦繼承,子類就擁有父類的方法和屬性钥勋,多一份約束
  • 增加耦合性炬转,當(dāng)父類屬性和方法被修改時(shí),需要考慮子類的修改
  • 一個(gè)類只能繼承一個(gè)父類(java)
  • 要真正做到不重寫父類方法是一種理想狀態(tài)

里氏替換原則最初由Barbara Liskov在1987年的一次學(xué)術(shù)會(huì)議中提出算灸,而真正正式發(fā)表是在1994年扼劈,Barbara Liskov 和 Jeannette Wing發(fā)表的一篇學(xué)術(shù)論文《A behavioral notion of subtyping》, Liskov是美國(guó)第一個(gè)計(jì)算機(jī)科學(xué)女博士

4.依賴倒置原則(Interface Segregation Principle)

  • 不要依賴具體,要依賴抽象(接口)
  • 抽象不應(yīng)該依賴實(shí)現(xiàn)乎婿,實(shí)現(xiàn)應(yīng)該抽象
  • 面向接口編程测僵,不要面向?qū)崿F(xiàn)編程

降低類間的耦合性,提高代碼的可讀性和可維護(hù)性

5.接口隔離原則(Dependence Inversion Principle)

  • 提供單一接口,不要提供臃腫龐大的接口
  • 盡量將臃腫龐大的接口拆分成更小的和更具體的接口捍靠,讓接口中只包含客戶感興趣的方法

接口隔離能有效降低類對(duì)接口的依賴性沐旨,從而降低耦合性,同時(shí)也應(yīng)該避免盲目過(guò)度拆分接口榨婆,造成接口類冗余磁携。

6.合成/聚合復(fù)用原則(Composite/Aggregate Reuse Principle CARP)

  • 盡量使用對(duì)象組合取代繼承來(lái)達(dá)到復(fù)用的目的

(1) 組合復(fù)用(Has-A)

在新類中通過(guò)組合關(guān)系來(lái)使用已有的類,使其成為新類的一部分良风,新類可以委派調(diào)用已有類的方法達(dá)到功能復(fù)用的目的谊迄,已有類內(nèi)部實(shí)現(xiàn)細(xì)節(jié)對(duì)于新類不可以見(jiàn),所以又稱“黑箱”復(fù)用.

(2) 繼承復(fù)用(Is-A)

通過(guò)繼承已有類烟央,讓新類擁有已有類(父類)的方法和屬性以達(dá)到復(fù)用功能的目的, 繼承會(huì)把父類的實(shí)現(xiàn)細(xì)節(jié)暴露給子類统诺,所以又稱“白箱”復(fù)用.

組合復(fù)用和繼承復(fù)用都能達(dá)到復(fù)用的目的,但是繼承復(fù)用會(huì)破壞系統(tǒng)的封裝性疑俭,父類發(fā)生變化粮呢,子類需要相應(yīng)發(fā)生變化,而合同復(fù)用更加靈活钞艇,耦合度更低

7.迪米特法則(Law Of Demeter)

  • 盡量降低類與類之間的耦合啄寡,一個(gè)類依賴的類越少越好。

  • 該法則也叫最少知道原則哩照, 一個(gè)類對(duì)于其他類知道的越少越好挺物,就是說(shuō)一個(gè)對(duì)象應(yīng)當(dāng)對(duì)其他對(duì)象有盡可能少的了解,只和朋友類通信,對(duì)于出現(xiàn)在成員變量飘弧、方法的輸入和輸出參數(shù)中的類都可以被稱為直接朋友识藤,而出現(xiàn)在方法體內(nèi)部的類不屬于朋友類即陌生人

  • 比如有三個(gè)類A、B眯牧、C蹋岩,現(xiàn)在A類只需要調(diào)用B類的方法,B類則去調(diào)用C類的屬性学少,如果此時(shí)A類中出現(xiàn)了C類的對(duì)象剪个,就相當(dāng)于A類和C類發(fā)生了耦合關(guān)系,但實(shí)際上兩者并不相關(guān)版确,并沒(méi)有聯(lián)系扣囊。此時(shí)B類應(yīng)該完成處理C類的屬性以及方法再將結(jié)果返回給A類,而A類也不需要出現(xiàn)C類即可

OO七大原則是包含Solid原則的绒疗,Solid原則是七大原則中前5個(gè)的首寫字母侵歇, 軟件編程總原則:低耦合,高內(nèi)聚

二吓蘑、設(shè)計(jì)模式 (23種)

1.創(chuàng)建型模式

2.結(jié)構(gòu)型模式

3.行為型模式:常用6種惕虑,不常用5種

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坟冲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子溃蔫,更是在濱河造成了極大的恐慌健提,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伟叛,死亡現(xiàn)場(chǎng)離奇詭異私痹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)统刮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門紊遵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人侥蒙,你說(shuō)我怎么就攤上這事暗膜。” “怎么了辉哥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵桦山,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我醋旦,道長(zhǎng),這世上最難降的妖魔是什么会放? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任饲齐,我火速辦了婚禮,結(jié)果婚禮上咧最,老公的妹妹穿的比我還像新娘捂人。我一直安慰自己,他們只是感情好矢沿,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布滥搭。 她就那樣靜靜地躺著,像睡著了一般捣鲸。 火紅的嫁衣襯著肌膚如雪瑟匆。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,185評(píng)論 1 284
  • 那天栽惶,我揣著相機(jī)與錄音愁溜,去河邊找鬼。 笑死外厂,一個(gè)胖子當(dāng)著我的面吹牛冕象,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播汁蝶,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼渐扮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起墓律,我...
    開(kāi)封第一講書(shū)人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤膀估,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后只锻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體玖像,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年齐饮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捐寥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡祖驱,死狀恐怖握恳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捺僻,我是刑警寧澤乡洼,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站匕坯,受9級(jí)特大地震影響束昵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜葛峻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一锹雏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧术奖,春花似錦礁遵、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至唧龄,卻和暖如春兼砖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背选侨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工掖鱼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人援制。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓戏挡,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親晨仑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子褐墅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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