設計模式之六大原則

来源:http://www.cnblogs.com/jiayayao/archive/2016/12/03/6129713.html
-Advertisement-
Play Games

單一職責原則 單一職責原則(Single responsibility principle),就一個類而言,應該只有一個引起它變化的原因。 在實際編程中的體現,比如一個類只是某一個事物相關的集合,一個函數只做一件事情,不要在這個函數中編寫一些不想關的邏輯,這樣可以最大程度的提高程式的可維護性,可復用 ...


  單一職責原則

  單一職責原則(Single responsibility principle),就一個類而言,應該只有一個引起它變化的原因。

  在實際編程中的體現,比如一個類只是某一個事物相關的集合,一個函數只做一件事情,不要在這個函數中編寫一些不想關的邏輯,這樣可以最大程度的提高程式的可維護性,可復用性。

  開放-封閉原則

  開放-封閉原則,是說軟體實體(類、模塊、函數等等)應該可以擴展,但是不可以修改,即對擴展是開放的,對修改是關閉的。新的需求,應該通過增加新的代碼來完成,而不是修改現有的代碼。絕對的對修改關閉是不可能的,可以預先猜測最有可能發生的變化種類,然後構造抽象來隔離那些變化。

  在實際編程中的體現,比如接手了一個複雜的代碼庫,要基於此完成某種功能時,如果一上手就咔咔咔大改裡面的邏輯,不僅不是正確的做法,有時越改越深入,如果不完全理解這個代碼庫的大部分邏輯,就不能完成當前的需求,耽誤了很長時間,老大肯定會不開心的^_^。

  依賴倒置原則

  1. 高層模塊不應該依賴底層模塊。兩個都應該依賴抽象;

  2. 抽象不應該依賴細節。細節應該依賴抽象。

  開發程式時,高層模塊調用底層模塊的函數。當要做新項目時,發現高層模塊基本一致,想要復用,但是要換用不同的資料庫或者存儲方式(底層模塊),而高層模塊與底層訪問資料庫的模塊綁定了,無法復用,這就出現了倒置。解決辦法是不管高層模塊還是底層模塊,都應該依賴抽象,具體一點就是介面和抽象類。 

  在實際生活當中的應用,比如電腦的主板、CPU、記憶體、硬碟等都是針對介面設計的,如果針對實現來設計,比如某一個型號的主板只支持某一個型號的CPU,這將會大大制約電腦的發展。在實際編程中的應用,比如,一個部門寫了一個lib,其他部門都要使用,那麼這些部門就應該相互溝通好,大家先把介面固定,然後各自編寫自己的程式,只要介面設計的穩定,這些部門之間就可以自己寫自己的程式,不用擔心相互干擾。

  里氏代換原則

  子類型必須能夠替換掉它們的父類型。意思是如果一個軟體實體使用的是一個父類的話,那麼一定適用於其子類,而且它察覺不出父類對象和子類對象的區別,即在軟體裡面,把父類都替換成它的子類,程式的行為沒有變化。再通俗點,如果一個方法需要父類對象作為輸入,如果你提供一個子類對象,它也應該正常工作,如果它不能正常工作,那麼這種寫法就違反了里氏替換原則。

  迪米特法則 

  迪米特法則,如果兩個類不必彼此直接通信,那麼這兩個類就不應該發生直接的相互作用。如果其中一個類需要調用領一個類的某一個方法的話,可以通過第三者轉發這個調用。在類的結構設計上,每一個類都應當儘量降低成員的訪問許可權,不需要公開的就不要公開,其根本思想是強調了類之間的松耦合。


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

-Advertisement-
Play Games
更多相關文章
  • 調用同步鎖的wait()、notify()、notifyAll()進行線程通信 看這個經典的存取款問題,要求兩個線程存款,兩個線程取款,賬戶里有餘額的時候只能取款,沒餘額的時候只能存款,存取款金額相同。相當於存取款交替進行,金額相同。 線程間通信,需要通過同一個同步監視器(也就是this或者顯式的O ...
  • 前言 日誌是非常重要的,最近有接觸到這個,所以系統的看一下Python這個模塊的用法。本文即為Logging模塊的用法簡介,主要參考文章為Python官方文檔,鏈接見參考列表。 另外,Python的 "HOWTOs文檔" 很詳細,連日誌該怎麼用都寫了,所以有英文閱讀能力的同學建議去閱讀一下。 Log ...
  • 1.安裝依賴包 2、安裝boost庫(對應版本高於或低於這個版本都有問題) 3、添加mysql用戶組 4、下載mysql源碼包並安裝 5.調整配置文件 6. 給安裝目錄設置許可權 7.初始化資料庫 註:初始化後會生成預設密碼,請記錄下來2016-02-17T03:16:36.869627Z 1 [No ...
  • 回到目錄 .Net MVC之所以發展的如些之好,一個很重要原因就是它公開了一組AOP的過濾器,即使用這些過濾器可以方便的攔截controller里的action,並註入我們自己的代碼邏輯,向全局的異常記錄,用戶授權,Url授權,操作行為記錄等,這一大批Lind的基本組件都是實現MVC和API的過濾實 ...
  • 代理模式(Proxy)為其他對象提供一種代理以控制對這個對象的訪問。使用場合,第一,遠程代理,也就是為一個對象在不同的地址空間提供局部代表。這樣可以隱藏一個對象存在於不同地址空間的事實;第二,虛擬代理,是根據需要創建開銷很大的對象。通過它來存在實例化需要很長時間的真實對象;第三,安全代理,用來控制真 ...
  • AccountController .java Java代碼 <!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@ ...
  • 單點登錄是我比較喜歡的一個技術解決方案,一方面他能夠提高產品使用的便利性,另一方面他分離了各個應用都需要的登錄服務,對性能以及工作量都有好處。自從上次研究過JWT如何應用於會話管理,加之以前的項目中也一直在使用CAS這個比較流行的單點登錄框架,所以就一直在琢磨如何能夠把JWT跟單點登錄結合起來一起使 ...
  • 單例模式, 顧名思義, 就是共用同一個實體對象. 對於共用, 首先想到的就是static靜態變數, 那麼怎麼使用static去實現單例呢. 一、單線程單例模式 由於這個模式的實現還是比較簡單的, 所以直接上代碼.(不推薦使用此方式) 私有化構造函數之後, 外部就不能通過new A()的方式來實例化A ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...