初見(jiàn)-六大設(shè)計(jì)原則

6大設(shè)計(jì)原則之單一職責(zé)原則

單一職責(zé)原則的英文名稱(chēng)是:Single Responsibility Principle, 簡(jiǎn)稱(chēng)SRP叹谁。

單一職責(zé)原則定義是:應(yīng)該有且僅有一個(gè)原因引起類(lèi)的變更拥坛。原話(huà):There should never be more than one reason for a class to change。

接口读处,類(lèi)糊治,和方法都可以應(yīng)用單一職責(zé)原則。

例:

用戶(hù)需求罚舱,要修改用戶(hù)密碼井辜,修改用戶(hù)地址,修改用戶(hù)證件號(hào)碼管闷,要怎么做呢粥脚?

方法適用單一職責(zé)原則:

方法一:

function changeUserInfo($Key, $value)

{

xxxxx;

}

方法二:

function changePassWord($oldPassWord, $newPassWord)

{

xxx;

}

function changeAddress($address)

{

xxxx;

}

function changeCard($cardType, $cardNum)

{

xxxx;

}

類(lèi)似這樣的方法包个,如果某人寫(xiě)了方法一刷允,那么對(duì)不起,不管你需要改動(dòng)多少代碼量碧囊,必須改回去树灶。

對(duì)于單一職責(zé)原則,我的建議是接口一定要做到單一職責(zé)糯而,類(lèi)的設(shè)計(jì)盡量做到只有一個(gè)原因引起變化天通。

6大設(shè)計(jì)原則之里氏替換原則

里氏替換原則的英文名稱(chēng)是:Liskov Substitution Principle,簡(jiǎn)稱(chēng)LSP

里氏替換原則定義是:所有引用基類(lèi)的地方必須能透明地使用其子類(lèi)的對(duì)象。

英文定義:Functions that use pointers of references to base classes must be able to use objects of derived classes without knowing it熄驼。

通俗點(diǎn)說(shuō):所有父類(lèi)能出現(xiàn)的地方子類(lèi)就可以出現(xiàn)像寒,并且替換為子類(lèi)也不會(huì)產(chǎn)生任何錯(cuò)誤或異常烘豹。反之則不可以。

里氏替換原則可以讓繼承的“優(yōu)點(diǎn)”發(fā)揮最大作用诺祸,同時(shí)減少“缺點(diǎn)”帶來(lái)的麻煩携悯。

繼承的優(yōu)點(diǎn):代碼共享,減少創(chuàng)建類(lèi)的工作量筷笨,每個(gè)子類(lèi)都擁有父類(lèi)的方法和屬性憔鬼。

提高代碼的重用性:“龍生龍,鳳生鳳”;

提高代碼的可擴(kuò)展性:實(shí)現(xiàn)父類(lèi)方法就可以“為所欲為”;

提高產(chǎn)品或項(xiàng)目的開(kāi)放性奥秆。

繼承的缺點(diǎn):

繼承是入侵性的逊彭。只要繼承咸灿,就必須擁有父類(lèi)的所有屬性和方法;

降低代碼的靈活性构订,子類(lèi)必須擁有父類(lèi)的屬性和方法,讓子類(lèi)自由的世界中多了些約束避矢;

增強(qiáng)了耦合性悼瘾。當(dāng)父類(lèi)的常量、變量和方法修改時(shí)审胸,必須要考慮子類(lèi)的修改亥宿,而且在缺乏規(guī)范的環(huán)境下,這種修改可能帶來(lái)非常糟糕的結(jié)果砂沛,大片的代碼需要重構(gòu)烫扼。

例子(待補(bǔ)充)

如果子類(lèi)不能完整地實(shí)現(xiàn)父類(lèi)的方法,或者父類(lèi)的某些方法在子類(lèi)中已經(jīng)發(fā)生“畸變”碍庵,則建議斷開(kāi)父子繼承關(guān)系映企,采用依賴(lài),聚集静浴,組合等關(guān)系代替繼承堰氓。

子類(lèi)中方法的前置條件必須與超類(lèi)中被覆寫(xiě)的方法的前置條件相同或者更寬松。

6大設(shè)計(jì)原則之依賴(lài)倒置原則

依賴(lài)倒置原則英文名稱(chēng)是:Dependence Inversion Principle,簡(jiǎn)稱(chēng)DIP

依賴(lài)倒置原則:(1)高層模塊不應(yīng)該依賴(lài)低層模塊苹享,兩者都應(yīng)該依賴(lài)其抽象; ? (2)抽象不應(yīng)該依賴(lài)細(xì)節(jié) ?(3)細(xì)節(jié)應(yīng)該依賴(lài)抽象

英文定義:High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details . Details should depend upon abstractions.

什么是低層模塊双絮?什么是高層模塊?每一個(gè)邏輯實(shí)現(xiàn)都是由原子邏輯組成的得问,不可分割的原子邏輯就是低層模塊囤攀,原子邏輯的再組裝就是高層模塊。

什么是抽象宫纬?什么是細(xì)節(jié)焚挠?抽象就是指接口或抽象類(lèi),兩者都不能被實(shí)例化哪怔。細(xì)節(jié)就是實(shí)現(xiàn)類(lèi)宣蔚,實(shí)現(xiàn)接口或集成抽象類(lèi)而產(chǎn)生的類(lèi)就是細(xì)節(jié)向抢,可以直接實(shí)例化。

依賴(lài)倒置原則的表現(xiàn):

(1)模塊間的依賴(lài)通過(guò)抽象發(fā)生胚委,實(shí)現(xiàn)類(lèi)之間不發(fā)生直接的依賴(lài)關(guān)系挟鸠,其依賴(lài)關(guān)系是通過(guò)接口或抽象類(lèi)產(chǎn)生的。

(2)接口或抽象類(lèi)不依賴(lài)于實(shí)現(xiàn)類(lèi)亩冬。

(3)實(shí)現(xiàn)類(lèi)依賴(lài)接口或抽象類(lèi)艘希。

采用依賴(lài)倒置原則優(yōu)點(diǎn):可以減少類(lèi)間的耦合性,提高系統(tǒng)的穩(wěn)定性硅急,降低并行開(kāi)發(fā)引起的風(fēng)險(xiǎn)覆享,提高代碼的可讀性和可維護(hù)性。

證明可以減少類(lèi)間耦合性营袜。

例子:(待補(bǔ)充)

結(jié)論:設(shè)計(jì)是否具備穩(wěn)定性撒顿,只要適當(dāng)“松松土”,觀(guān)察我們的設(shè)計(jì)荚板,是否還可以茁壯成長(zhǎng)就可以得出結(jié)論凤壁。穩(wěn)定性高的設(shè)計(jì),在周?chē)h(huán)境頻繁變化時(shí)跪另,依然可以做到“我自巋然不動(dòng)”拧抖;

證明減少并行開(kāi)發(fā)引起的風(fēng)險(xiǎn),并行開(kāi)發(fā)最大的風(fēng)險(xiǎn)是風(fēng)險(xiǎn)擴(kuò)散

4.接口隔離原則

5.迪米特法則(最少知識(shí)原則)

要求只和朋友交流,并且我只知道你提供這么多public方法 其他不管

6.開(kāi)閉原則

對(duì)于擴(kuò)展規(guī)則是開(kāi)的免绿。修改源碼是閉的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末唧席,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嘲驾,更是在濱河造成了極大的恐慌淌哟,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件距淫,死亡現(xiàn)場(chǎng)離奇詭異绞绒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)榕暇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)蓬衡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人彤枢,你說(shuō)我怎么就攤上這事狰晚。” “怎么了缴啡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵壁晒,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我业栅,道長(zhǎng)秒咐,這世上最難降的妖魔是什么谬晕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮携取,結(jié)果婚禮上攒钳,老公的妹妹穿的比我還像新娘。我一直安慰自己雷滋,他們只是感情好不撑,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著晤斩,像睡著了一般焕檬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上澳泵,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天实愚,我揣著相機(jī)與錄音,去河邊找鬼烹俗。 笑死爆侣,一個(gè)胖子當(dāng)著我的面吹牛萍程,可吹牛的內(nèi)容都是我干的幢妄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼茫负,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蕉鸳!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起忍法,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤潮尝,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后饿序,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體勉失,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年原探,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乱凿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咽弦,死狀恐怖携冤,靈堂內(nèi)的尸體忽然破棺而出隐孽,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布昧穿,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抑淫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姥闪。 院中可真熱鬧丈冬,春花似錦、人聲如沸甘畅。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)疏唾。三九已至蓄氧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間槐脏,已是汗流浹背喉童。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留顿天,地道東北人堂氯。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像牌废,于是被迫代替她去往敵國(guó)和親咽白。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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

  • 單一職責(zé)原則 (SRP) 全稱(chēng) SRP , Single Responsibility Principle 單一職...
    米莉_L閱讀 1,768評(píng)論 2 5
  • 設(shè)計(jì)模式六大原則 設(shè)計(jì)模式六大原則(1):?jiǎn)我宦氊?zé)原則 定義:不要存在多于一個(gè)導(dǎo)致類(lèi)變更的原因鸟缕。通俗的說(shuō)晶框,即一個(gè)類(lèi)...
    viva158閱讀 770評(píng)論 0 1
  • 轉(zhuǎn)載標(biāo)注聲明:http://www.uml.org.cn/sjms/201211023.asp 目錄:[設(shè)計(jì)模式六...
    Bloo_m閱讀 719評(píng)論 0 7
  • 設(shè)計(jì)模式六大原則(1):?jiǎn)我宦氊?zé)原則 定義:不要存在多于一個(gè)導(dǎo)致類(lèi)變更的原因。通俗的說(shuō)懂从,即一個(gè)類(lèi)只負(fù)責(zé)一項(xiàng)職責(zé)授段。 ...
    Jabir_Zhang閱讀 646評(píng)論 0 3
  • 設(shè)計(jì)模式之六大原則(轉(zhuǎn)載) 關(guān)于設(shè)計(jì)模式的六大設(shè)計(jì)原則的資料網(wǎng)上很多...
    霄霄霄霄閱讀 900評(píng)論 0 1