java 设计模式原则_Java设计模式的七大原则
設(shè)計(jì)原則名稱
定??義
使用頻率
單一職責(zé)原則(Single Responsibility Principle, SRP)
一個(gè)類只負(fù)責(zé)一個(gè)功能領(lǐng)域中的相應(yīng)職責(zé)。
★★★★☆
開閉原則(Open-Closed Principle, OCP)
軟件實(shí)體應(yīng)對(duì)擴(kuò)展開放,而對(duì)修改關(guān)閉。開閉原則的關(guān)鍵在于抽象化。
★★★★★
里氏代換原則(Liskov Substitution Principle, LSP)
所有引用基類對(duì)象的地方能夠透明地使用其子類的對(duì)象【子類不應(yīng)該覆蓋父類的非抽象方法】。里氏代換原則是實(shí)現(xiàn)開閉原則的重要方式之一
★★★★★
依賴倒轉(zhuǎn)原則(Dependence? Inversion Principle, DIP)
抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。是開閉原則的基礎(chǔ)。【可以通過依賴注入的方式實(shí)現(xiàn)】
★★★★★
接口隔離原則(Interface Segregation Principle, ISP)
使用多個(gè)專門的接口,而不使用單一的總接口。【需要把控好接口的粒度】
★★☆☆☆
合成復(fù)用原則(Composite Reuse Principle, CRP)
復(fù)用時(shí)要盡量使用組合/聚合關(guān)系(關(guān)聯(lián)關(guān)系),少用繼承。
★★★★☆
迪米特法則(最少知道)(Law of Demeter, LoD)
一個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少地與其他實(shí)體發(fā)生相互作用。
★★★☆☆
里氏代換原則
里氏代換原則是對(duì)“開-閉”原則的補(bǔ)充。實(shí)現(xiàn)“開-閉”原則的關(guān)鍵步驟就是抽象化。而基類與子類的繼承關(guān)系就是抽象化的具體實(shí)現(xiàn),所以里氏代換原則是對(duì)實(shí)現(xiàn)抽象化的具體步驟的規(guī)范。需要注意以下幾點(diǎn):
(1)子類的所有方法必須在父類中聲明,或子類必須實(shí)現(xiàn)父類中聲明的所有方法。
(2)盡量把父類設(shè)計(jì)為抽象類或者接口,讓子類繼承父類或?qū)崿F(xiàn)父接口,并實(shí)現(xiàn)在父類中聲明的方法。
(3)子類不應(yīng)該覆蓋父類的非抽象方法(可以重載,但一定要調(diào)父類的方法)。
依賴倒轉(zhuǎn)原則
在實(shí)現(xiàn)依賴倒轉(zhuǎn)原則時(shí),我們需要針對(duì)抽象層編程,而將具體類的對(duì)象通過依賴注入的方式注入到其他對(duì)象中,依賴注入是指當(dāng)一個(gè)對(duì)象要與其他對(duì)象發(fā)生依賴關(guān)系時(shí),通過抽象來注入所依賴的對(duì)象。常用的注入方式有三種,分別是:構(gòu)造注入,設(shè)值注入(Setter注入)和接口注入。
(1)構(gòu)造注入是指通過構(gòu)造函數(shù)來傳入具體類的對(duì)象。
(2)設(shè)值注入是指通過Setter方法來傳入具體類的對(duì)象。
(3)接口注入是指通過在接口中聲明的業(yè)務(wù)方法來傳入具體類的對(duì)象。
這些方法在定義時(shí)使用的是抽象類型,在運(yùn)行時(shí)再傳入具體類型的對(duì)象,由子類對(duì)象來覆蓋父類對(duì)象。
開閉原則是目標(biāo),里氏代換原則是基礎(chǔ),依賴倒轉(zhuǎn)原則是手段。
接口隔離原則
(1)在使用接口隔離原則時(shí),我們需要注意控制接口的粒度。
(2)接口不能太小。如果太小會(huì)導(dǎo)致系統(tǒng)中接口泛濫,不利于維護(hù);
(3)接口也不能太大。太大的接口將違背接口隔離原則,靈活性較差,使用起來很不方便。
一般而言,接口中僅包含為某一類用戶定制的方法即可,不應(yīng)該強(qiáng)迫客戶依賴于那些它們不用的方法。
合成復(fù)用原則
通過繼承來進(jìn)行復(fù)用的主要問題在于繼承復(fù)用會(huì)破壞系統(tǒng)的封裝性。因?yàn)槔^承會(huì)將基類的實(shí)現(xiàn)細(xì)節(jié)暴露給子類,由于基類的內(nèi)部細(xì)節(jié)通常對(duì)子類來說是可見的,所以這種復(fù)用又稱“白箱”復(fù)用,如果基類發(fā)生改變,那么子類的實(shí)現(xiàn)也不得不發(fā)生改變;從基類繼承而來的實(shí)現(xiàn)是靜態(tài)的,不可能在運(yùn)行時(shí)發(fā)生改變,沒有足夠的靈活性。
一般而言,如果兩個(gè)類之間是“Has-A”的關(guān)系應(yīng)使用組合或聚合,如果是“Is-A”關(guān)系可使用繼承。"Is-A"是嚴(yán)格的分類學(xué)意義上的定義,意思是一個(gè)類是另一個(gè)類的"一種";而"Has-A"則不同,它表示某一個(gè)角色具有某一項(xiàng)責(zé)任。
Java設(shè)計(jì)模式詳解
項(xiàng)目源碼
微信公眾號(hào)
> 更多資訊內(nèi)容,歡迎掃描關(guān)注我的個(gè)人微信公眾號(hào)!
總結(jié)
以上是生活随笔為你收集整理的java 设计模式原则_Java设计模式的七大原则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac安装多php环境变量配置,Mac如
- 下一篇: linux后台启动脚本nohup,lin