設計模式之六大原則

来源: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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...