概述
最終就是 抽象 單一直則 最小化
單一職責(zé)原則(Single Responsibility Principle)
簡述
簡稱SPR 一個類只做一件事.
并不是說一個類只有一個函數(shù),而是說這個類中的所有函數(shù)必須是高度相關(guān)的.高內(nèi)聚.
優(yōu)點(diǎn)
- 類的復(fù)雜度降低,實(shí)現(xiàn)什么職責(zé)有明確的定義
- 可讀性提高
- 可維護(hù)性提高
- 變更引起的風(fēng)險降低.一個接口的修改只影響相應(yīng)的實(shí)現(xiàn)類,對其他的接口無影響.
里氏替換原則(Liskov Substitution Principle)
簡述
面向?qū)ο笳Z言三大特征是封裝,繼承,多態(tài).
里氏替換原則簡單來說就是所有引用基類的地方必須能透明的使用其子類的對象.也就是說,只要有父類出現(xiàn)的地方子類就可以出現(xiàn),并且用這個子類替換父類也不會產(chǎn)生任何錯誤和異常,但是反過來就不行,父類不一定能替代子類.
例如構(gòu)造方法的參數(shù)是接口類型的,只要實(shí)現(xiàn)了這個接口的都可以調(diào)用這個構(gòu)造方法創(chuàng)建對象
優(yōu)點(diǎn)
- 代碼共享減少創(chuàng)作類的工作量,因?yàn)槊總€子類都擁有父類的所有方法和屬性
- 提高代碼重用度
- 提高代碼可擴(kuò)展性,實(shí)現(xiàn)父類的方法就行了
- 提高產(chǎn)品和項目的開放性
缺點(diǎn)
- 繼承是入侵的,只要繼承就必須擁有父類的所有屬性和方法
- 降低代碼靈活性,子類必須擁有父類的所有屬性的方法,對子類多了些約束
- 增強(qiáng)了耦合性,當(dāng)父類的常量,變量,方法等改變時要考慮到子類的修改.搞不好大量代碼需要重構(gòu).
依賴倒置原則(Dependence inversion Principle)
簡述
- 高層模塊不應(yīng)該依賴低層模塊,兩者都應(yīng)該依賴其抽象
- 抽象不應(yīng)該依賴細(xì)節(jié)
- 細(xì)節(jié)應(yīng)該依賴抽象
JAva中抽象就是指接口或抽象類,兩者都不能被實(shí)例化.實(shí)現(xiàn)或繼承他們產(chǎn)生的類就是細(xì)節(jié),細(xì)節(jié)的特點(diǎn)是能被實(shí)例化.
模塊之間的依賴通過抽象發(fā)生,實(shí)現(xiàn)類與實(shí)現(xiàn)類之間不發(fā)生直接依賴關(guān)系,他們的依賴關(guān)系是通過接口或抽象類進(jìn)行的.
面向接口編程是面向?qū)ο缶柚?
優(yōu)點(diǎn)
- 可拓展性好
- 耦合度低
開閉原則(Open-Close Principle)
簡述
java中最基礎(chǔ)的設(shè)計原則,指導(dǎo)我們?nèi)绾谓⒁粋€穩(wěn)定/靈活的系統(tǒng).
定義:一個軟件實(shí)體,如類,模塊,函數(shù)都應(yīng)該對擴(kuò)展開放,對修改關(guān)閉.
在軟件生命周期內(nèi),迭代時盡量通過擴(kuò)展的方式來實(shí)現(xiàn)變化,而不是通過修改執(zhí)勤啊的已有代碼來實(shí)現(xiàn).
優(yōu)點(diǎn)
- 增加穩(wěn)定性
- 可拓展性高
接口隔離原則(Interface Segregation Principle)
簡述
客戶端不應(yīng)該依賴他不需要的接口.一個類對另一個類的依賴應(yīng)該建立在最小的接口上.檔一個接口太大時,就要考慮分割成更小的接口.客戶端進(jìn)需要指導(dǎo)與之相關(guān)的方法即可
優(yōu)點(diǎn)
- 降低耦合性
- 提高代碼的可讀性
- 隱藏實(shí)現(xiàn)細(xì)節(jié)
迪米特原則(Law of Demeter)/最少知識原則(Least Knowledge Principle)
簡述
一個對象應(yīng)該對其他對象有最少的了解.
類的內(nèi)部如何實(shí)現(xiàn),如何復(fù)雜都與調(diào)用者或依賴者沒有關(guān)系,調(diào)用者或依賴者只需要知道他需要的方法即可.
優(yōu)點(diǎn)
- 降低復(fù)雜度
- 降低耦合度
- 增加穩(wěn)定性