面向對象六大基本原則

来源:https://www.cnblogs.com/gxl1995/archive/2018/05/10/9020094.html
-Advertisement-
Play Games

設計模式六大基本原則 1.單一職責原則 英文:Single Responsibility Principles,縮寫SRP 定義:就一個類而言,應該僅有一個引起它變化的原因。 理解:例如兩個完全不一樣的功能就不應該放在一個類中。一個類總應該是一組相關性很高的函數,數據的封裝。 對應一個類,不求功能面 ...


設計模式六大基本原則  

1.單一職責原則

英文:Single Responsibility Principles,縮寫SRP   定義:就一個類而言,應該僅有一個引起它變化的原因。   理解:例如兩個完全不一樣的功能就不應該放在一個類中。一個類總應該是一組相關性很高的函數,數據的封裝。 對應一個類,不求功能面面俱到,只求能把一件事做好

2.開閉原則

英文:Open Close Principle,縮寫OCP   定義:對於擴展是開放的,對於更改是封閉的。就是說軟體實體(類、模塊、函數等等)應該可以擴展,但是不能修改。   理解:在軟體的生命周期中,因為變化,升級維護等原因需要對軟體原有代碼進行修改時,可能會將錯誤引入源碼已經經過測試的沒有錯誤的舊代碼中,造成以前沒有錯誤的代碼錯誤。因此,當軟體需要變化時,我們應該儘量通過擴展的方式來實現變化,而不是通過修改已有代碼來實現。   實現開放封閉原則的關鍵就是抽象。對應已存在的實現類對應修改時封閉的,但是心的實現類可以通過覆蓋父類的介面應對變化。

3.里氏替換原則

英文:Liskov Substitution Principle,縮寫LSP   定義:所有引用基類的地方必須能透明的使用其子類的對象   理解:只要父類能出現的地方子類就可以出現,而且替換為子類不會產生任何錯誤或異常,使用者根本不需要知道是父類還是子類。但是,反過來就不行了,有子類出現的地方,父類未必能適應。總結起來就是:抽象。  

4.依賴倒置原則

英文:Dependence Inversion Principle,縮寫DIP   定義:高層模塊不應該依賴底層模塊,兩個都應該依賴抽象;抽象不應該依賴細節,細節應該依賴抽象。   抽象是指介面或抽象類,兩者都是不能直接被實例化的;細節就是實現類,實現介面或繼承抽象類而產生的類就是細節,其特點是可以實例化,也就是可以加上一個關鍵字 new 產生一個對象。高層模塊就是調用端,底層模塊就是具體實現類。
  理解:這個原則的精髓就是,面向介面編程,或者說面向抽象編程,這裡的抽象是指介面或者抽象類。依賴倒轉原則是開放封閉原則實現的手段,是抽象的最好規範。依賴抽象,而不依賴具體實現。

5.介面隔離原則

英文:Interface Segregation Principle,縮寫ISP   定義:客戶端不應該依賴它不需要的介面,即類間的依賴關係應該建立在最小介面上。   理解:就是將非常龐大,臃腫的介面拆分成更小的和更具體的介面(這個和單一職責有點像只不過這個是介面),這樣使用者只需要知道他們感興趣的方法就行。這樣做可以使系統擁有更低的耦合性、更高的靈活性。這個原則說白了就是,讓客戶端依賴的介面儘可能的小。

6.迪米特原則

英文:Law of Demeter,縮寫LOD   定義:這個原則也叫最少知識原則:一個對象應該對其它對象有最少的瞭解。   理解:這個原則有一個英文解釋就是說 Only talk to your immedate friends,翻譯就是只和直接的朋友通信。什麼是直接朋友?每個對象都必然會與其他對象有耦合關係,兩個對象直接的耦合就成為朋友關係,這種類型有很多,如組合,聚合,依賴等。   調用者或者依賴者只要知道它需要的方法即可,至於方法是如何實現的,實現方法的類需要做什麼,都不需要知道。知道的越少耦合度約低,當一個類發生變化的時候,對另一個類的影響越小。就像現實中的找中介租房,我們只關係房間的面積和租金,讓中介將符合要求的房子提供給我們就行了。

 


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

-Advertisement-
Play Games
更多相關文章
  • 上題: In this tutorial you will create a stored procedure and triggers to check a complex constraint. Consider the table definition below: While the uni ...
  • 資料庫的基本操作命令 15.索引 ...
  • 上班坐下來沒多久,接同事電話說有兩台mysql伺服器無法訪問,其中這兩台伺服器是mycat伺服器+MySQL伺服器,具體處理過程如下: 一、錯誤信息 錯誤信息01: 錯誤信息02: 錯誤信息03: 二、錯誤原因 1、針對錯誤信息01,基本可以斷定是由於伺服器jvm設置不當,導致記憶體溢出。 2、針對錯 ...
  • 雙擊打開後加上 ;-m 然後以管理員方式 打開 SQLSERVER 2008 就可以已window身份登錄 不過還沒有完 右鍵 屬性 =》安全性 更改為 sql server 和 window身份驗證模式 沒有sql server登陸賬號的話創建一個 然後把-m去掉就可以用帳號登錄了 ...
  • MariaDB/MySQL備份恢復系列: 備份和恢復(一):mysqldump工具用法詳述 備份和恢復(二):導入、導出表數據 備份和恢復(三):xtrabackup用法和原理詳述 本文目錄: 1.安裝xtrabackup 2.備份鎖 3.xtrabackup備份原理說明 3.1 備份過程(back ...
  • MySQL元數據 Meta Data,一般是結構化數據(如存儲在資料庫里的數據,欄位長度、類型、預設值等等)。Meta Data就是描述數據的數據,在MySQL中描述有哪些資料庫、哪些表、表有多少欄位、類型。 MySQL元數據信息 查詢結果信息,SELECT、UPDATE或DELETE語句影響的行數 ...
  • 當實際項目上線到生產環境中,難以避免一些意外情況,如數據丟失、伺服器停機等。對於系統的搜索服務來說,當遇到停機的情況意味著在停機這段時間內,用戶都不能通過搜索的相關功能進行訪問數據,停機意味著將這一段時間內的數據服務完全停止。如果項目是互聯網項目依賴於用戶數量,這將嚴重影響用戶訪問和用戶的產品體驗。 ...
  • 本文主要總結並記錄一下簡單且常用的mysql 在cmd 視窗中操作的基本命令 命令停止mysql 資料庫服務 1.(cmd)命令行 2.手動: 1. 使用快捷鍵 ctr+alt+delete =》2. 啟動任務管理器=》3. 進入服務 =》4.找到mysql 將其啟動/關閉 3.登錄/退出mysql ...
一周排行
    -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# ...