參考:http://www.cocoachina.com/ios/20180914/24916.html
1.開閉原則铐懊。
一個(gè)軟件實(shí)體狮鸭,如類浇冰,模塊和函數(shù)應(yīng)該對(duì)外擴(kuò)展開發(fā)浆西,對(duì)內(nèi)修改關(guān)閉。
解讀:用抽象構(gòu)建框架惫谤,用實(shí)現(xiàn)擴(kuò)展細(xì)節(jié)壁顶。不以改動(dòng)原有類的方式來實(shí)現(xiàn)新需求,而是應(yīng)該以實(shí)現(xiàn)事先抽象出來的接口(或具體類繼承抽象類)的方式來實(shí)現(xiàn)溜歪。
優(yōu)點(diǎn):開閉原則的優(yōu)點(diǎn)在于可以在不改動(dòng)原有代碼的前提下給程序擴(kuò)展功能若专。增加了程序的可擴(kuò)展性,同時(shí)也降低了程序的維護(hù)成本蝴猪。
2.單一職責(zé)原則调衰。
一個(gè)類只允許有一個(gè)職責(zé),即只有一個(gè)導(dǎo)致該類變更的原因自阱。
解讀:類職責(zé)的變化往往就是導(dǎo)致類變化的原因:也就是說如果一個(gè)類具有多種職責(zé)嚎莉,就會(huì)有多種導(dǎo)致這個(gè)類變化的原因,從而導(dǎo)致這個(gè)類的維護(hù)變得困難沛豌。往往在軟件開發(fā)中趋箩,隨著需求的不斷增加,可能會(huì)給原來的類添加一些本來不屬于它的一些職責(zé)加派,從而違反了單一職責(zé)原則叫确。如果我們發(fā)現(xiàn)當(dāng)前類的職責(zé)不僅僅有一個(gè),就應(yīng)該將本來不屬于該類真正的職責(zé)分離出去芍锦。不僅僅是類启妹,函數(shù)也要遵循單一職責(zé)原則,即一個(gè)函數(shù)制作一件事情醉旦。如果發(fā)現(xiàn)一個(gè)函數(shù)里面有不同的任務(wù)饶米,則需要將不同的任務(wù)以另一個(gè)函數(shù)的形式分離出去。
優(yōu)點(diǎn):如果類與方法的職責(zé)劃分的很清晰车胡,不但可以提高代碼的可讀性檬输,更實(shí)際性地更降低了程序出錯(cuò)的風(fēng)險(xiǎn),因?yàn)榍逦拇a會(huì)讓bug無處藏身匈棘,也有利于bug的追蹤丧慈,也就是降低了程序的維護(hù)成本。
3.依賴倒置原則主卫。
依賴抽象而不是依賴實(shí)現(xiàn)逃默。抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴抽象簇搅。高層模塊不能依賴低層模塊完域,二者都應(yīng)該依賴抽象。
解讀:針對(duì)接口編程瘩将,而不是針對(duì)實(shí)現(xiàn)編程吟税。盡量不要從具體的類派生凹耙,而是以繼承抽象類或?qū)崿F(xiàn)接口來實(shí)現(xiàn)。關(guān)于高層模塊與低層模塊的劃分可以按照決策能力的高低進(jìn)行劃分肠仪。業(yè)務(wù)層自然就處于上層模塊肖抱,邏輯層和數(shù)據(jù)層自然就歸類為底層。
優(yōu)點(diǎn):通過抽象來搭建框架异旧,建立類和類的關(guān)聯(lián)意述,以減少類間的耦合性。而且以抽象搭建的系統(tǒng)要比以具體實(shí)現(xiàn)搭建的系統(tǒng)更加穩(wěn)定吮蛹,擴(kuò)展性更高欲险,同時(shí)也便于維護(hù)。
4.接口分離原則匹涮。
多個(gè)特定的客戶端接口要好于一個(gè)通用性的總接口。
解讀:客戶端不應(yīng)該依賴它不需要實(shí)現(xiàn)的接口槐壳。不建立龐大臃腫的接口然低,應(yīng)盡量細(xì)化接口,接口中的方法應(yīng)盡量少务唐。需要注意的是接口的力度也不能太小雳攘,如果過小,則會(huì)造成接口數(shù)量過多枫笛,使設(shè)計(jì)復(fù)雜化吨灭。
優(yōu)點(diǎn):避免同一個(gè)接口里面包含不同類職責(zé)的方法,接口責(zé)任劃分更加明確刑巧,符合高內(nèi)聚低耦合的思想喧兄。
5.迪米特法則
一個(gè)對(duì)象應(yīng)該對(duì)盡可能少的對(duì)象有接觸,也就是只接觸那些真正需要接觸的對(duì)象啊楚。
解讀:迪米特法則也叫做最少知道原則吠冤,一個(gè)類應(yīng)該只和它的成員變量,方法的輸入恭理,返回參數(shù)中的類作交流拯辙,而不應(yīng)該引入其他的類(間接交流)。
優(yōu)點(diǎn):實(shí)踐迪米特法則可以良好地降低類與類之間的耦合颜价,減少類與類之間的關(guān)聯(lián)程度涯保,讓類與類之間的協(xié)作更加直接。
6.里氏替換原則周伦。
所有引用基類的地方必須能透明地使用其子類的對(duì)象夕春,也就是說子類對(duì)象可以替換其父類對(duì)象,而程序執(zhí)行效果不變专挪。
解讀:在繼承體系中撇他,子類中可以增加自己特有的方法茄猫,也可以實(shí)現(xiàn)父類的抽象方法,但是不能重寫父類的非抽象方法困肩,否則該繼承關(guān)系就不是一個(gè)正確的繼承關(guān)系划纽。
優(yōu)點(diǎn):可以檢驗(yàn)繼承使用的正確性,約束繼承在使用上的泛濫锌畸。