




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、一、 單一職責原則:英文名稱是Single Responsibility Principle,簡稱SRP。有且只有一個原因引起類的變更。There should never be more than one reason for a class to change. 例如在電話類的設計中,接口包含三個方法:撥號,通話和掛電話。但是這個接口包含了兩個職責,撥號和掛電話屬于協議管理,通話屬于數據傳輸。不符合單一職責原則。可以將撥號和掛電話作為一個接口,通話作為一個接口,一個類實現了這兩個接口,把兩個職責融合在一個類中,對外公布的是接口,而不是實現類。優點:類的復雜度降低,提高了可讀性,可維護性,降
2、低了變更引起的風險。單一職責不僅適用于接口,類,還適用于方法,盡量使每個方法的職責清晰。二、里氏替換原則:Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it. 所有引用基類的地方必須透明地使用其子類的對象。 通俗的講,只要父類出現的地方,子類都可以出現,而且替換為子類也不會發生任何異常或錯誤,使用者根本不需要知道是子類還是父類。包含四層含義:1 子類必須完全實現父類的方法。2 子類可以有自己的方法。3
3、 覆蓋或實現父類的方法時,輸入參數可以放大。例如父類有一個的doSomething方法,其參數為(HashMap),而子類中重載了這個方法,參數為(Map),因為參數不一樣,所以不是覆寫,而是重載,此時,當子類當做父類使用時,傳入HashMap參數,執行的為父類的方法。若反過來,傳入HashMap時,執行的是子類的方法。4 覆蓋或實現父類的方法時,返回值要變小。 3和4條是為了保證版本升級時的兼容性,比如以前版本是創建了一個father類,新版本創建了子類,并使用子類,滿足上述兩條后可以實現系統兼容。傳遞不同的子類,三、依賴倒置原則(Dependence Inversion Principle
4、, DIP):High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depends upon details. Details should depend upon abstractions.包含三層含義1 高層模塊不應該依賴底層模塊,兩者都應該依賴其抽象。2 抽象不應該依賴于細節3 細節應該依賴于抽象。簡單的說就是面向接口編程,模塊間的依賴是通過抽象發生的,實現類之間不發生直接的依賴關系,其依賴是通過接
5、口或者抽象類發生的。優點:依賴倒置原則可以減少類間的耦合性,提高系統的穩定性,降低并行開發引起的風險,提高代碼的可讀性和可維護性。實現類直接不直接發生依賴關系,降低了耦合性,采用接口編程,由于調用的是接口,不必等實現類完成,就可以對調用者進行開發,測試。例如在頂層模塊實現司機開車功能,司機和車都屬于底層。在編寫的過程中,要編寫司機和車的接口,司機里調用車時,調用的是接口,通過接口,構造函數或者SET方法給接口賦值。當車模型改變時,不需要修改底層的司機類。符合了單一職責,只有司機改變時,才能引起司機類的變化。依賴的三種實現方法:構造函數:上例中,建立司機類的時候,通過構造函數給司機類中的車接口賦
6、值。SET方法:在司機類中,增加一個PUBLIC 的SET方法,調用該方法時,給司機類中的車賦值。接口方法:在調用的車的方法參數中,有一個參數為車的接口。編程原則:1每個接口盡量有接口或者抽象類,或者抽象類接口都有。2變量的表面類型盡量是接口或者抽象類。第1條和第2條不是必須的,比如編寫工具類XXXUtils時。3盡量不要覆寫基類的方法。類間依賴的是抽象,覆寫了抽象的方法,會對依賴的穩定性造成一定的影響。總結:依賴倒置要求編程時,面向抽象或者接口。這就要求子類繼承時,盡量不要新增方法,否則按照依賴倒置原則編程,根本訪問不到子類新增的方法。四、接口隔離原則:Client should not b
7、e forced to depend upon interfaces that they dont use. (客戶端不應該依賴它不需要的接口。)The dependency of one class to another one should depend on the smallest possible interface. (類間的依賴關系應該建立在最小的接口上)根據第一種定義,客戶端需要什么接口就提供什么接口,把不需要的接口剔掉,這就需要對接口進行細化。在第二種定義中,要求接口細化。這兩種定義實質上都是要求建立單一接口。實例:比如星探查找美女,美女的定義是相貌美麗并且氣質好。如果在一個
8、接口里定義相貌美麗和氣質好會造成接口臃腫,如果美女的標準變了,會對接口造成影響。這里應該使美女實現相貌美麗和氣質好兩個接口,這樣星探的抽象類就依賴兩個接口,而不是一個臃腫的接口,靈活性增強。接口是我們設計時對外提供的契約,通過分散定義多個接口,可以預防未來變更的擴展,提高系統的靈活性和可維護性。接口設計原則1接口要盡量小。但是小是有限度的,不能違反單一職責原則,也就不能把一個職責拆分成兩個接口。2接口要高內聚。高內聚就是提高接口,類和模塊的處理能力,減少對外的交互。接口要盡量少的公布public方法,接口是對外的承諾,承諾的越少,對系統開發越有利,變更的風險就越少,同時有利于降低成本。3定制服
9、務。定制服務就是單獨為一個個體提供優良的服務,我們在做系統設計時,也需要考慮系統之間或模塊之間的接口提供定制服務。這就要求接口只提供訪問者需要的方法。4接口設計是有限度的。接口設計粒度越小,系統越靈活,但是靈活的同時也會帶來結構的復雜化,開發難度增加,可維護性降低。最佳實踐一個接口只服務于一個子模塊或者業務邏輯通過業務邏輯壓縮接口中的public方法。被污染的接口盡量去修改,若修改的風險太大,則可以使用適配器模式進行轉化處理,五、迪米特原則(Law of Demeter, LoD)也成最小知識原則(Least Knowledge Principle ,LKP):一個對象應該對其他對象有最少的了
10、解,通俗的講,一個類應該對自己需要耦合或調用的類知道得最少。四層含義:1只和朋友交流。迪米特原則還有一個英文解釋是:Only talk to your immediate friends(只與直接的朋友通信)。例如,教師向班長發送命令,數女生的個數。則教師中發送命令方法需要傳入班長類,由班長類執行數女生個數。在這中情況下,在教師類中不應該建立女生類,而應該在班長類中建立女生類,對女生個數進行統計。 朋友類:出現在成員變量,或者輸入參數的類稱為方法類,而出現在方法體內部的類不屬于朋友類。因而在上例中,教師類中不應該出現女生類。 2朋友之間也是有距離的。例如在安裝軟件時,通過向導類,第一步安裝成功
11、可以安裝第二步,第二步安裝成功,可以執行第三步。在這種情況下,向導類應該對外提供一個安裝方法,此方法根據判斷條件調用三步安裝方法,實現了整個安裝過程。而不是讓用戶去調用每一步安裝方法,并根據安裝是否成功,決定下一步安裝。 在與MES集成的項目中,提供服務的方法類很簡單,其主要實現都是調用其他類來實現的。3是自己的終究是自己的。在應用中可能出現這樣一個方法,放在本類中也可以,放在其他類中葉可以。衡量準則如下:如果一個方法放在本類中,即不增加類間關系,也不會對本類產生負面影響,就放置在本類中。當然,如果該方法有多個類調用,則可放入工具類中。4慎用Serializable,如果在項目中,采用遠程調用
12、方法傳遞值對象,該對象就必須實現Serializable接口,也就是對網絡傳輸的對象進行序列號,否則會出現異常。最佳實踐:迪米特法則的核心就是類間解耦,弱耦合,只有解耦后,復用率才可以提高。但是這樣會導致產生大量的中轉類或者跳轉類,導致系統的復雜性提高,同時也給維護帶來難度。在實際項目中,一個類跳轉兩次才能訪問到另個一個類,就需要進行重構了。六、開閉原則 :Software entities like classes, modules and functions should be open for extension but close for modifications. (一個軟件實體如
13、類,模塊和函數應該對擴展開放,對修改關閉) 開閉原則要求盡量通過擴展軟件實體的方法來適應變化,而不是通過修改已有的代碼來完成變化。它是為軟件實體的未來而制定的對現行開發設計進行約束的一個原則。簡單例子:以圖書銷售為例,圖書有三個屬性,價格,書名以及作者。小說書繼承了圖書接口。如果有一天圖小說書打折,修改方案有三種:(1)修改圖書接口,在接口中增加獲得打折價格方法。缺點是所有實現圖書的接口都需要增加這種方法。(2)直接修改小說類中獲得價格的方法。缺點是:無論誰都看不到小說書的原價。(3)新寫一個打折小說類,繼承小說類,覆寫其中的價格方法。銷售時,將打折小說類賦給圖書接口。采購人員查看價格時,可以通過常見小說類實現。變化分類:我們把變化分為三種。(1)邏輯變化 只變化一個邏輯,不涉及其它模塊。可以通過修改類中的方法來完成。前提條件是所有依賴或者關聯的類都按照相同的邏輯處理。(2)子模塊變化 一個子模塊變化,會引起高層的變化。因此通過擴展完成變化時,高層次的模塊修改也是必然的。(3)可見視圖的變化 如何應用開閉原則:(1)抽象約束 通過接口或者抽象類可以約束一組可能變化的行為,并且能夠實現對擴展開放。包含三層和含義:第一,通過接口和抽象類約束擴展,多擴展進行邊界限定,不允許出現在接口
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國可伸縮乒乓球網格行業市場全景分析及前景機遇研判報告
- 2025年中國咖啡機清潔液行業市場全景分析及前景機遇研判報告
- 癌癥康復期用藥指南
- 中國防雷避雷產品行業市場深度分析及行業發展趨勢報告
- 2019-2025年中國定制酒行業市場深度分析及發展前景預測報告
- 網圍欄可行性研究報告
- 中國電動自行車電商行業發展監測及市場發展潛力預測報告
- 2025年中國豆腐行業市場深度分析及發展前景預測報告
- 起重安裝項目投資可行性研究分析報告(2024-2030版)
- 2025年 云南省觀光車駕駛-特種設備作業N2證考試練習題附答案
- 小學生匯報講課件
- 2025浙江嘉興市海寧市嘉睿人力招聘5人筆試參考題庫附帶答案詳解析版
- 2025年安徽蚌埠市龍子湖區東方人力資源有限公司招聘筆試參考題庫含答案解析
- 黨課課件含講稿:《關于加強黨的作風建設論述摘編》輔導報告
- GB/T 19023-2025質量管理體系成文信息指南
- 2025中考歷史高頻點速記大全
- 2025年特種設備作業人員氣瓶充裝P證考試題庫
- 多余物管理制度
- 2024北京朝陽區三年級(下)期末語文試題及答案
- 灌腸技術操作課件
- 電梯維保服務投標方案
評論
0/150
提交評論