設計模式原則

来源:http://www.cnblogs.com/huanmin/archive/2016/10/08/5938164.html
-Advertisement-
Play Games

一、什麼是設計模式 在軟體開發中,設計模式是對軟體設計中普遍存在的一些問題,所使用的解決方案 也就是說:設計模式是一套被反覆使用、多數人知曉的、經過分類的、代碼設計的 經驗的總結 使用設計模式可以達到代碼重用,讓代碼閱讀性更高,同時保證了代碼的可靠性。 由於java種具有23種設計模式,但都遵循著6 ...


一、什麼是設計模式

在軟體開發中,設計模式是對軟體設計中普遍存在的一些問題,所使用的解決方案

也就是說:設計模式是一套被反覆使用、多數人知曉的、經過分類的、代碼設計的 經驗的總結

使用設計模式可以達到代碼重用,讓代碼閱讀性更高,同時保證了代碼的可靠性。

由於java種具有23種設計模式,但都遵循著6個設計原則,所以最好是理解原則後,在去理解模式

 

二、設計模式原則

在java開發中有6中設計模式

1、開閉原則(Open Close Principle)

開閉原則:對擴展開放,對修改關閉。在程式需要進行擴展的時候,不能去修改或影響原有的代碼。

簡單的說,就是為了使程式的擴展性更好,易於維護和升級。想要達到這樣的效果,我們需要使用介面和抽象類

 

2、里氏替換原則(Liskov Substitution Principle)

里氏替換:任何基類可以出現的地方,子類一定可以出現。

里氏替換原則是面向對象設計的基本原則之一。里氏替換原則是繼承復用的基石,只有當子類可以替換掉基類,且軟體單位的功能不受到影響時,基類才能真正被覆用,而且子類也能夠在基類的基礎上增加新的行為。里氏代換原則是對開閉原則的補充。實現開閉原則的關鍵步驟就是抽象化,而基類與子類的繼承關係就是抽象化的具體實現。

 

3、依賴倒置原則(Dependence Inversion Principle)

依賴倒置:針對介面編程,高層模塊不應該依賴底層模塊,二者都應該依賴抽象。

這個原則是開閉原則的基礎。面向過程的開發,高層調用下層,高層依賴於下層,當下層劇烈變動時高層也要跟著變動。這就會導致模塊的復用性降低而且大大提高了開發的成本。當兩者都依賴於抽象時,下層的改變並不會影響到高層的功能

 

4、介面隔離原則(Interface Segregation Principle)

介面隔離:客戶端不應該依賴它不需要的介面;一個類對另一個類的依賴應該建立在最小的介面上。

使用多個隔離的介面,比使用單個龐大的介面要好。其目的在於降低耦合度。其實設計模式就是從大型軟體架構出發,便於升級和維護的軟體設計思想。它強調低依賴、低耦合。

 

5、單一職責原則(Single Responsibility Principle)

單一職責:一個類只負責一項職責。

一個實體應儘量少地與其他實體之間發生相互作用,應該使得系統功能模塊相對獨立。

單一職責和介面隔離區別:一,單一職責原則註重的是職責;而介面隔離原則註重對介面依賴的隔離。二,單一職責原則主要約束的是類,其次才是介面和方法,它針對的是程式中的實現和細節;而介面隔離原則主要約束介面,主要針對抽象,針對程式整體框架的構建。

 

6、最少知識原則(Demeter Principle)

最少知識:又叫迪米特法則。一個對象應當對其他對象有儘可能少的瞭解。

一個對象應該對其他對象保持最少的瞭解。類與類之間的關係越密切,耦合度越大,當一個類發生改變時,對另一個類的影響也越大。如果兩個類不必彼此直接通信,那麼這兩個類就不應當發生直接的相互作用。如果其中一個類需要調用另一個類的某一個方法的話,可以通過第三者轉發這個調用。


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

-Advertisement-
Play Games
更多相關文章
  • ''' list ''''''name=[1,2,3,4]print(name[0])#第一個print(name[:]) #全部#print(name[1:3]) #切片#print(name[-3:-1])#倒取值print(name[-2:-1])#[頭:尾] 顧頭不顧尾print(name[ ...
  • 又是在學數據結構的時候,發現了之前學習的知識遺忘很多,在發現對C/C++中關鍵字typedef的理解還是沒有到位後,我翻閱了學C++用到的課本,又問了度娘,也看了不少關於typedef用法的博客。於是我就想把我理解的東西整理下來。 一.基本解釋 typedef為C語言的關鍵字,作用是為一種數據類型定 ...
  • 這段時間看的部分感覺沒啥需要記錄下來的,個人也沒什麼想法,不過以後還是要多記,多寫 這個main方法是永遠不停的,其餘兩個從兩個不同的角度給出了同步的方法 總之:當多個線程共用可變數據的時候,每個讀或者寫數據的線程都必須執行同步。 ...
  • 每天一個設計模式-1 簡單工廠 1.簡單工廠的定義 提供一個創建對象實例的功能,而無須關心其具體實現(核心)。 雖然不能讓模塊外部知道模塊內部的具體實現,但模塊內部是可以知道具體實現類的。乾脆在模塊內部建一個類,用這個類來創建介面,然後把創建號的介面返回給客戶端;這樣,外部應用就只需要根據這個類來獲 ...
  • Atitit Atitit.軟體相容性原理 API相容 Qa7 1. 相容性的重要性與反面教材1 2. 提升相容性的原則2 2.1. What 與how 分離2 2.2. 老人老辦法,新人新辦法,只新增,少修改,莫刪除3 2.3. 計劃趕不上變化,永遠api修改也不可能整齊劃一,反而帶來不相容的風險 ...
  • 回到目錄 對於IoC容器來說,性能最好的莫過於Autofac了,而對於靈活度來說,它也是值得稱贊的,為了考慮系統的性能,我們經常是在系統初始化於將所有依賴註冊到容器里,當需要於根據別名把實現拿出來,然後再使用即可;而如果每次使用都是註冊-反射,我相信那是很耗性能的,所以我們決定先依賴一次註冊,按需反 ...
  • SpringBootService,這是一個spring boot微服務的框架,包括redis,mq,restful,定時器,mybatis。易擴容、易維護的架構。 項目說明 該項目使用maven進行管理,可直接在maven projects下Plugins的spring-boot中運行.切記勿忘數 ...
  • XML語言 什麼是XML? XML是指可擴展標記語言(eXtensible Markup Language),它是一種標記語言,很類似HTML。它被設計的宗旨是傳輸數據,而非顯示數據。 XML標簽沒有被預定義,需要用戶自行定義標簽。 XML技術是W3C組織(World Wide Web Consor ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...