單一職責(zé)
定義
應(yīng)該有且僅有一個原因引起類的變更。
詳細(xì)描述
接口的職責(zé)在設(shè)計時應(yīng)該做到單一,降低類的復(fù)雜性若皱,實現(xiàn)的職責(zé)都有明確的定義魂拦,提高了可讀性、可維護(hù)性波桩、可擴(kuò)展性;
變更引起的風(fēng)險降低,如果接口隔離性做的好偏灿,一個接口的修改只對相應(yīng)實現(xiàn)類有影響,對其它接口沒有影響钝的,降低了耦合性翁垂。
(單一職責(zé)提出了一個編寫程序的標(biāo)準(zhǔn)铆遭,用“職責(zé)”或“變化原因”來衡量接口或類設(shè)計的是否優(yōu)良,但是“職責(zé)”或“變化原因”都是不可度量的沿猜,因項目而異枚荣,因環(huán)境而異)
里氏替換原則(Liskov Substitution Principle LSP)
定義
是面向?qū)ο笤O(shè)計的基本原則之一,只要父類能出現(xiàn)的地方子類就能出現(xiàn)啼肩,而且替換為子類也不會產(chǎn)生任何錯誤或異常橄妆。
詳細(xì)描述
LSP原則是繼承復(fù)用的基石,只有當(dāng)子類能夠替換掉父類祈坠,軟件單位功能不受影響時害碾,父類才能被真正復(fù)用。LSP原則是對開閉原則的補(bǔ)充赦拘,實現(xiàn)開閉原則的關(guān)鍵步驟就是抽象化慌随,而父類與子類的繼承關(guān)系就是抽象化的具體實現(xiàn),所以里氏代換原則是對實現(xiàn)抽象化的具體步驟的規(guī)范躺同。
子類必須完全實現(xiàn)父類的方法
子類可以有自己的個性
子類可以有自己的個性
子類可以有自己的個性
優(yōu)點(diǎn)
代碼共享阁猜,減少創(chuàng)建類的工作量
提高代碼的重用性
子類可以形似父類,但又異于父類
提高代碼的可擴(kuò)展性
提高產(chǎn)品或項目的開放性
缺點(diǎn)
繼承是侵入性的蹋艺,只要繼承就必須擁有父類的所有屬性和方法
降低代碼的靈活性
增強(qiáng)了耦合性剃袍,父類的常量、變量捎谨、方法被修改時民效,要考慮到子類的修改,在缺乏規(guī)范的環(huán)境下涛救,可能有許多代碼需要重構(gòu)研铆。
依賴倒置原則(Dependence Inversion Principle, DIP)
定義
高層模塊不應(yīng)該依賴低層模塊,兩者都應(yīng)該依賴其抽象州叠,抽象不應(yīng)該依賴細(xì)節(jié)棵红,細(xì)節(jié)應(yīng)該依賴抽象
面向接口編程(Object-Oriented Design, OOD)
優(yōu)點(diǎn)
依賴倒置原則可以降低類間的耦合性;
依賴倒置原則可以提高系統(tǒng)的穩(wěn)定性咧栗;
依賴倒置原則可以減少并行開發(fā)引起的風(fēng)險逆甜;
依賴倒置原則可以提高代碼的可讀性和可維護(hù)性;
接口隔離原則
定義
使用多個專門的接口致板,而不使用單一的總接口交煞,即客戶端不應(yīng)該依賴那些它不需要的接口。
詳細(xì)描述
接口僅僅提供客戶端需要的行為斟或,客戶端不需要的行為則隱藏起來素征,應(yīng)當(dāng)為客戶端提供盡可能小的接口,而不要提供大的總接口
迪米特法則(Low of Demeter ,LoD)又稱最少知識原則
定義
一個軟件實體應(yīng)當(dāng)盡可能少的與其他實體發(fā)生相互作用。
詳細(xì)描述
應(yīng)該盡量減少對象之間的交互御毅,如果兩個對象不必直接通信根欧,那么這兩個對象就不應(yīng)該發(fā)生任何直接的相互作用,如果其中一個對象需要調(diào)用另外一個對象的某個方法時端蛆,可以通過第三者轉(zhuǎn)發(fā)這個調(diào)用凤粗。就是通過引入一個合理的第三者來降低先有對象之間的耦合度。
開閉原則
定義
對擴(kuò)展開放今豆,對修改關(guān)閉
詳細(xì)描述
開閉原則(Open Closed Principle)是編程中最基礎(chǔ)嫌拣、最重要設(shè)計原則
一個軟件實體如類,模塊和函數(shù)應(yīng)該對擴(kuò)展開放(對提供方)呆躲,對修改關(guān)閉(對使用方)异逐。用抽象構(gòu)建框架,用實現(xiàn)擴(kuò)展細(xì)節(jié)插掂。
一個軟件實體如類灰瞻,模塊和函數(shù)應(yīng)該對擴(kuò)展開放(對提供方),對修改關(guān)閉(對使用方)燥筷。用抽象構(gòu)建框架,用實現(xiàn)擴(kuò)展細(xì)節(jié)院崇。
編程中遵循其它原則肆氓,以及使用設(shè)計模式的目的就是遵循開閉原則。