淺談Java設(shè)計模式之七大設(shè)計原則
前言
學(xué)習(xí)設(shè)計模式的方法:掌握理解七大原則以及其目的,學(xué)習(xí)相應(yīng)的設(shè)計模式(帶著設(shè)計目的,應(yīng)用場景(解決什么樣的問題),如何實現(xiàn)(編碼實現(xiàn)一個小例子),優(yōu)缺點是什么?等等)
一、單一職責(zé)原則(SingleResponsibilityPrinciple,SRP)
定義:一個類只負責(zé)一個功能領(lǐng)域中的相應(yīng)職責(zé)
理解:該設(shè)計模式很好理解,就是一個類只實現(xiàn)某個領(lǐng)域的相應(yīng)職責(zé),這樣有利于進行調(diào)用。就比如在Java開發(fā)時,設(shè)計controller、service、manager、dao層一樣的道理,進行分層分工,再和生活貼近一點,人們在社會中也是更加各有所長進行職責(zé)分工協(xié)調(diào)更好地運行社會。
例子:可能在剛開始學(xué)習(xí)Java進行課設(shè)設(shè)計時,可能會將DB連接,圖表展示都放在一個類里面,這樣導(dǎo)致該類就比較冗雜。為了遵循該原則應(yīng)該將其分解為DBUtil和ChartDisplay兩個類。
二、開閉原則(Open-ClosedPrinciple,OCP)
定義:軟件實體應(yīng)對擴展開放,而對修改關(guān)閉
理解:剛開始看到該原則定義,其實有點懵,然后結(jié)合例子就很容易明白了。其意思就是當該類需要進行拓展(比如說添加一個新功能(方法))是可以的,但進行修改某功能則不可以。怎么實現(xiàn)呢?那就得看下個里氏代換原則了。不過目的還是為了拓展,維護。
例子:假設(shè)需要展示不同圖表,你采用傳入type參數(shù)去控制展示何種圖表,那么當你拓展時,就需要添加新的判斷比較,進行了修改,破壞了原類。不符合該原則,改進辦法,使用抽象類或者接口進行拓展。
三、里氏代換原則(LiskovSubstitutionPrinciple,LSP)
定義:所有引用基類對象的地方能夠透明地使用其子類的對象
理解:簡單地說,就是接口(基類、抽象類)進行定義,子類進行動態(tài)實現(xiàn)。便于(2)的原則實現(xiàn)。
例子:以下如service包中進行接口定義,然后…impl實現(xiàn),再在controller中進行基類接口聲明定義,最后在實際使用中進行動態(tài)調(diào)用。
四、依賴倒換原則(DependenceInversionPrinciple,DIP)
定義:抽象不應(yīng)該依賴于細節(jié),細節(jié)應(yīng)該依賴于抽象
理解:也就是面向接口編程,應(yīng)該先進行接口定義該業(yè)務(wù)需要哪些方法,也可以適當書寫步驟,然后再在實現(xiàn)類里面進行細節(jié)完善。
例子:如下,就是先把接口寫好(明確業(yè)務(wù)),然后實現(xiàn)類進行具體實現(xiàn)。
五、接口隔離原則(InterfaceSegregationPrinciple,ISP)
定義:使用多個專門的接口,而不使用單一的總接口
理解:和單一原則大同小異,就是針對的對象不同,一個是類一個是接口。在此方面深有感觸,剛開始時進行編寫接口基本上按一個功能模塊(比如說登錄一模塊,支付一模塊,新聞一模塊)一個接口,后面維護時發(fā)現(xiàn)找相應(yīng)具體功能點就比較麻煩了,而且實現(xiàn)類里面十分龐雜(幾百行代碼看重都頭疼)。
六、合成復(fù)用原則(CompositeReusePrinciple,CRP)
定義:盡量使用對象組合,而不是繼承來達到復(fù)用的目的
理解:復(fù)用時應(yīng)該多用關(guān)聯(lián),少用繼承。不過感覺一般習(xí)慣性就關(guān)聯(lián)復(fù)合吧,沒什么好講的。
七、迪米特法則(LawofDemeter,LoD)
定義:一個軟件實體應(yīng)當盡可能少地與其他實體發(fā)生相互作用。
理解:為了避免修改該類后影響其他類(不過IDEA報錯工具很強大也不要怕哈哈哈。),應(yīng)該讓此類盡可能不與其他類發(fā)生關(guān)聯(lián),主要有其他類構(gòu)造注入,參數(shù)注入,依賴注入等。在設(shè)計時,多考慮有沒有必要加入引用,是否可以設(shè)計一個中間類去管理。
到此這篇關(guān)于淺談Java設(shè)計模式之七大設(shè)計原則的文章就介紹到這了,更多相關(guān)Java七大設(shè)計原則內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring boot監(jiān)控Actuator-Admin實現(xiàn)過程詳解
這篇文章主要介紹了Spring boot監(jiān)控Actuator-Admin實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09Spring?Boot?ORM?框架JPA使用與連接池?Hikari詳解
這篇文章主要介紹了SpringBoot?ORM框架JPA與連接池Hikari,主要就是介紹JPA?的使用姿勢,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2023-08-08java實現(xiàn)識別二維碼圖片功能方法詳解與實例源碼
這篇文章主要介紹了java實現(xiàn)識別二維碼圖片,java無法識別二維碼情況下對二維碼圖片調(diào)優(yōu)功能方法與實例源碼,需要的朋友可以參考下2022-12-12Spring Boot如何使用Spring Security進行安全控制
要實現(xiàn)訪問控制的方法多種多樣,可以通過Aop、攔截器實現(xiàn),也可以通過框架實現(xiàn),本文將具體介紹在Spring Boot中如何使用Spring Security進行安全控制。2017-04-04Netty源碼解析NioEventLoop創(chuàng)建的構(gòu)造方法
這篇文章主要介紹了Netty源碼解析NioEventLoopGroup之NioEventLoop創(chuàng)建的構(gòu)造方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03Spring Cloud Gateway 使用JWT工具類做用戶登錄校驗功能
這篇文章主要介紹了Spring Cloud Gateway 使用JWT工具類做用戶登錄校驗的示例代碼,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01