1、序言
軟件設計模式(Design pattern),又稱設計模式,是一套被反復使用、多數(shù)人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性、程序的重用性。
打個比方就像蓋大廈和小木屋,當功能簡單,函數(shù)和代碼少時,我們能較輕松的直接上手;但如果是像大廈那樣,功能復雜,需求可能變化且代碼量大時,我們就不能直接上手就來,需要像建筑圖紙那樣提前規(guī)劃設計,那設計模式就像軟件(程序)的建筑圖紙。
2、設計模式分類
**創(chuàng)建型模式:**共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
**結構型模式:**共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
**行為型模式:**共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態(tài)模式、訪問者模式、中介者模式、解釋器模式。
3、設計模式的目的
代碼可重用性 相同功能得代碼,不用多次編寫,降低冗余
可讀性 編程規(guī)范性,便于其他程序員的閱讀和理解
可擴展性 當需要增加新的功能時候,非常方便維護
可靠性 當我們增加新的功能,對原有得功能沒有影響
使程序呈現(xiàn)高內聚 低耦合得特性 模塊內部緊密,但模塊之間依賴小,一者出錯,不影響他者。
4、設計模式的七大原則
4.1 單一職責原則(Single Responsibility Principle)
定義:一個類只負責一個功能領域中的相應職責,而不是變成萬能的
? 優(yōu)點:
4.2 開閉原則(Open-Closed Principle, OCP)
定義:軟件實體應對擴展開放,而對修改關閉。開閉原則的關鍵在于抽象化
。在程序需要進行拓展的時候,不能去修改原有的代碼,實現(xiàn)一個熱插拔的效果。簡單來說:就是為了使程序的擴展性好,易于維護和升級。
4.3里氏代換原則(Liskov Substitution Principle)
定義:所有引用基類對象的地方能夠透明地使用其子類的對象【子類不應該覆蓋父類的非抽象方法】。里氏代換原則是實現(xiàn)開閉原則的重要方式之一
,需要注意以下幾點:
(1)子類的所有方法必須在父類中聲明,或子類必須實現(xiàn)父類中聲明的所有方法。
(2)盡量把父類設計為抽象類或者接口,讓子類繼承父類或實現(xiàn)父接口,并實現(xiàn)在父類中聲明的方法。
(3)子類不應該覆蓋父類的非抽象方法(可以重載,但一定要調父類的方法)
4.4 依賴倒轉原則(Dependence Inversion Principle, DIP)
定義:抽象不應該依賴于細節(jié),細節(jié)應該依賴于抽象。是開閉原則的基礎?!究梢酝ㄟ^依賴注入的方式實現(xiàn)】,依賴注入是指當一個對象要與其他對象發(fā)生依賴關系時,通過抽象來注入所依賴的對象
。常用的注入方式有三種,分別是:構造注入,設值注入(Setter注入)和接口注入。
(1)構造注入是指通過構造函數(shù)來傳入具體類的對象。
(2)設值注入是指通過Setter方法來傳入具體類的對象。
(3)接口注入是指通過在接口中聲明的業(yè)務方法來傳入具體類的對象。
這些方法在定義時使用的是抽象類型,在運行時再傳入具體類型的對象,由子類對象來覆蓋父類對象。
開閉原則是目標,里氏代換原則是基礎,依賴倒轉原則是手段。
4.5 接口隔離原則(Interface Segregation Principle, ISP)
定義:使用多個專門的接口,而不使用單一的總接口。【需要把控好接口的粒度】
注意事項:
1)在使用接口隔離原則時,我們需要注意控制接口的粒度
。
(2)接口不能太小。如果太小會導致系統(tǒng)中接口泛濫,不利于維護;
(3)接口也不能太大。太大的接口將違背接口隔離原則,靈活性較差,使用起來很不方便。
一般而言,接口中僅包含為某一類用戶定制的方法即可,不應該強迫客戶依賴于那些它們不用的方法。
4.6合成復用原則(Composite Reuse Principle, CRP)
定義:復用時要盡量使用組合/聚合關系(關聯(lián)關系),少用繼承。
通過繼承來進行復用的主要問題在于繼承復用會破壞系統(tǒng)的封裝性
。因為繼承會將基類的實現(xiàn)細節(jié)暴露給子類,由于基類的內部細節(jié)通常對子類來說是可見的,所以這種復用又稱“白箱”復用,如果基類發(fā)生改變,那么子類的實現(xiàn)也不得不發(fā)生改變;從基類繼承而來的實現(xiàn)是靜態(tài)的,不可能在運行時發(fā)生改變,沒有足夠的靈活性。
一般而言,如果兩個類之間是“Has-A”的關系應使用組合或聚合,如果是“Is-A”關系可使用繼承
?!癐s-A"是嚴格的分類學意義上的定義,意思是一個類是另一個類的"一種”;而"Has-A"則不同,它表示某一個角色具有某一項責任。
4.7 迪米特法則(最少知道)(Law of Demeter, LoD)
定義:一個軟件實體應當盡可能少地與其他實體發(fā)生相互作用,使得系統(tǒng)功能模塊相對獨立。
相關文章
Java設計模式之七大設計原則
Java設計模式的七大原則
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
當前標題:Java設計模式-目的和設計原則-創(chuàng)新互聯(lián)
網站地址:http://www.rwnh.cn/article38/doegpp.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網站、網站制作、企業(yè)建站、全網營銷推廣、標簽優(yōu)化、外貿網站建設
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容