Java設計模式開篇

来源:http://www.cnblogs.com/chun-jiang-chao-de-gu-shi/archive/2016/04/10/5375534.html
-Advertisement-
Play Games

在所有的設計模式開篇中,總是說一個好的架構,或多或少都會有設計模式的出現。當然或多或少也會使用設計模式的相關原則: SOLID+迪米爾原則 1.優化代碼的第一步:單一職責原則 S:單一職責鏈原則:英文名稱為Single Responsibility Principle(SRP) 定義:就一個類而言, ...


在所有的設計模式開篇中,總是說一個好的架構,或多或少都會有設計模式的出現。當然或多或少也會使用設計模式的相關原則:

SOLID+迪米爾原則


 

1.優化代碼的第一步:單一職責原則

S:單一職責鏈原則:英文名稱為Single Responsibility Principle(SRP)

定義:就一個類而言,應該僅有一個引起它變化的原因。通俗來說:一個類中應該有一組相關性很高的函數、數據的封裝。但是在設計模式之禪中說這個說法的爭議比較大,因為單一職責的劃分界限並不是那麼清晰的。就像明明知道資料庫設計的時候要保持一條記錄的原子性,但是為了方便後期操作的時候,不需要進行表連接而快速的獲取到數據,會出現部分冗餘的欄位。


 

2.讓程式更穩定、更靈活的:開閉原則

O:開閉原則:英文名稱為:Open Close Principle(OCP),它是Java裡面最基礎的設計原則:

定義:軟體中的對象(類、模塊、函數等)應該對於擴展是開放的,但是對於修改是封閉的。

軟體開發中最讓人煩惱的不是產品設計出來的功能不能實現,而是實現出來之後,下個版本要對本功能進行修改。但是如果我們修改原先的代碼不能保證原先軟體模塊的正確性。如果我們開發的是第三方的Jar包,已經將jar給其它客戶了,下個版本更新的時候要讓用戶所有用到jar文件的地方都要修改這很明顯是十分不合理的,此時開閉原則顯得非常重要。


 

3.構建擴展性更好的系統:里氏替換原則

L:里氏替換原則:英文名稱為:Liskov Substitution Principle(LSP)

定義:所有引用基類的地方必須能透明的使用子類的對象。

面向對象三大特點:封裝、繼承、多態。李氏替換原則依賴於繼承與多態。通俗的講:只要父類能出現的地方,其子類一定可以出現,而且替換成子類也不會產生任何異常和錯誤,調用者根本就不需要知道當前調用的對象是子類還是父類。反之則不一定成立,有子類出現的地方,父類未必能適應。總結兩個字就是:抽象。

里氏替換原則的核心就是抽象,抽象又依賴於繼承這個特性。在OOP編程中:繼承的優缺點相當明顯:

優點:

1)代碼重用,減少創建類的成本,每個子類都擁有父類的屬性和方法

2)子類和父類基本相似,但是又比父類多了自己的特征

3)提高代碼的可擴展性

繼承的缺點:

從側面上看,繼承的優點基本上也就是它的缺點:

1)繼承是侵入式的,只要繼承就必須擁有父類的所有屬性和方法。(連拒絕接收遺產的資格都沒有)

2)因為子類繼承了父類屬性和方法,可能導致子類代碼冗餘。

開閉原則和里氏替換原則是相互依靠的,通過里氏替換來達到對擴展開放,對修改關閉的效果。


 

4.系統有更高的靈活性:介面隔離原則

I:介面隔離:InterfaceSegregation Principle(ISP)

定義:類間的依賴關係應該建立在最小的介面上。通俗的講:讓客戶端依賴的介面儘可能的小


 

5.讓項目擁有變化的功能:依賴倒置原則

D:依賴倒置:Dependence Inversion Principle(DIP)重點在解耦上面

定義:模塊間的依賴通過抽象發生,實現類之間不發生直接的依賴關係,其依賴關係是通過介面和抽象類產生的。

更好的擴展性:迪米特原則

6.迪米特原則:Law of Demeter(LOD)

定義:一個對象應該對其它對象有最少的瞭解。通俗的說,一個類對自己需要耦合或者調用的類知道的最少,類的內部如何實現與調用者或者依賴者沒有關係,調用者或者依賴者只需要知道它需要的方法即可,其它的一概不用管。類與類之間的關係越密切,耦合度越大,當一個類放生改變的時候,對另一個類影響也越大。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、整型 取值範圍如果加了unsigned,則最大值翻倍,如tinyint unsigned的取值範圍為(0~256)。 int(m)里的m是表示SELECT查詢結果集中的顯示寬度,並不影響實際的取值範圍,沒有影響到顯示的寬度,不知道這個m有什麼用。 2、浮點型(float和double) 設一個字 ...
  • 1.單例設計模式核心作用: 保證一個類只有一個實例,並且提供了訪問該實例的全局訪問點 2.常見應用場景: window的任務管理器 項目中讀取配置文件一般也是一個單例模式 資料庫連接池的設計也是採用單例模式,因為資料庫連接是一種資料庫資源 操作系統的文件管理系統,也是單例模式,一個操作系統只能有一個 ...
  • 線程安全與鎖優化 1.線程安全 (1)當多個線程訪問一個對象時,如果不考慮這些線程在執行時環境下的調度和交替執行,也不需要進行額外的同步,或者在調用方進行任何其他的協調操作,調用這個對象的行為都可以獲得正確的結果,那麼這個對象時是線程安全的。 (2)Java語言中的線程安全 a)可以將Java語言中 ...
  • #登堂入室——JAVA流——文章出自PeterYe,不得私自轉載###我所知道的>java.io裡面的[流],就仿佛太平洋裡面的水一樣,浩浩蕩蕩,橫無際涯。。。——天黑請閉眼,明日再續。。。 ...
  • 獲取【下載地址】 QQ: 313596790 【免費支持更新】三大資料庫 mysql oracle sqlsever 更專業、更強悍、適合不同用戶群體【新錄針對本系統的視頻教程,手把手教開發一個模塊,快速掌握本系統】A 集成代碼生成器(開發利器); 技術:313596790 增刪改查的處理類,ser ...
  • 培訓大數據架構開發! 從零基礎到高級,一對一培訓![技術QQ:2937765541] 課程體系: 獲取視頻資料和培訓解答技術支持地址 課程展示(大數據技術很廣,一直線上為你培訓解答!): 獲取視頻資料和培訓解答技術支持地址 ...
  • Atiti。流量提升軟體設計大綱規劃 v1 q45 1. 通用數據管理1 2. 網頁Url管理模塊1 3. 網站domain管理1 4. ad廣告管理2 5. Task任務管理2 6. 任務執行功能::進入網站,隨機瀏覽網頁2 7. 系統設置2 8. 界面跨平臺h52 9. 開發語言java+h53 ...
  • atitit.userService 用戶系統設計 v5 q330 1. 新特性1 2. Admin login1 3. 用戶註冊登錄2 3.1. <!-- 會員註冊使用 --> 商家註冊2 3.2. <!-- 會員登錄使用 -->3 3.3. <!-- 會員退出登錄 -->3 3.4. <!-- ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...