設計模式2——原則篇:依賴倒轉原則、單一職責原則、合成|聚合復用原則、開放-封閉原則、迪米特法則、里氏代換原則

設計模式2——設計原則篇

目錄

?一、依賴倒轉原則

二、單一職責原則(SRP)

三、合成|聚合復用原則(CARP)

四、開放-封閉原則

五、迪米特法則(LoD)

六、里氏代換原則

?七、接口隔離原則

?八、總結


?一、依賴倒轉原則

1、抽象不應該依賴細節,細節應該依賴于抽象。針對接口編程,不要對實現編程。
2、高層模塊不應該依賴低層模塊。兩個都應該依賴抽象。

二、單一職責原則(SRP)

1、就一個類而言,應該僅有一個引起它變化的原因。
2、如果一個類承擔的職責過多,就等于把這些職責耦合在一起,一個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當變化發生時,設計會遭到意想不到的破壞。
3、軟件設計真正要做的許多內容,就是發現職責并把那些職責相互分離。
4、如果你能夠想到多于一個的動機去改變一個類,那么這個類就具有多于一個的職責。

三、合成|聚合復用原則(CARP)

1、盡量使用合成/聚合,盡量不要使用類繼承。
2、其中:聚合是一種弱的擁有關系;而合成是強關系,表示整體與部分。

四、開放-封閉原則

1、軟件實體(類、模塊、函數等)應該可以擴展,但是不可修改。
2、對于擴展是開放的、對于修改是封閉的。
3、怎樣的設計才能面對需求的改變卻可以保持相對穩定,從而使得系統可以在第一個版本以后不斷推出新的版本呢?---答案:開放-封閉
4、無論模塊是多么的‘封閉’,都會存在一些無法對之封閉的變化。既然不可能完全封閉,設計人員必須對于他設計的模塊應該對哪種變化封閉做出選擇。他必須先猜測出最有可能發生的變化種類,然后構造抽象來隔離那些變化。
5、在我們最初編寫代碼時,假設變化不會發生。當變化發生時,我們就創建抽象來隔離以后發生的同類變化。
6、開放-封閉原則是面向對象設計的核心所在。
當然要注意,避免不及,也要避免過及。

五、迪米特法則(LoD)

1、如果兩個類不必彼此直接通信,那么這兩個類就不應當發生直接的相互作用。如果其中一個類需要調用另一個類的某一個方法的話,可以通過第三者轉發這個調用。
2、在類的設計上,每個類應當盡量降低成員的訪問權限。
3、強調類之間的松耦合,類之間的耦合越弱,越有利于復用,一個處在弱耦合的類被修改,不會對有關系的類造成波及。
4、有種打鐵還需自身硬,減少耦合還得先減少自己放出去的權限。

六、里氏代換原則

1、子類型必須能夠替換掉它們的父類型。
2、只有當子類可以替換掉父類,軟件單位的功能不受到影響時,父類才能真正被復用,而子類也能夠在父類的基礎上增加新的行為。
3、由于子類型的可替換性才使得使用父類型的模塊在無須修改的情況下就可以擴展了。

?七、接口隔離原則

1、客戶端不應該依賴它不需要的接口,即一個類對另一個類的依賴應該建立在最小的接口上。
2、也即一個接口也不應該太復雜。

?八、總結

?核心思想可以提取出,為:

  • 要高內聚、低耦合
  • 要把可能會改變的地方隔離出來
  • 要依賴抽象編程,而不是具體實現

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10413.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10413.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10413.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python-VBA函數之旅-setattr函數

目錄 一、setattr函數的常見應用場景 二、setattr函數使用注意事項 三、如何用好setattr函數? 1、setattr函數: 1-1、Python: 1-2、VBA: 2、推薦閱讀: 個人主頁: https://blog.csdn.net/ygb_1024?…

宏集Panorama SCADA軟件獲BACnet BTL認證

Panorama 獲得BACnet BTL認證 建筑物的組件(空調系統、照明傳感器等)能否使用共同通訊協議?這正是標準化 BACnet協議(Building Automation and Control Networks)所提供的功能。該協議旨在實現建筑物中各種設備和系統…

【TS】入門

創建項目 vscode自動編譯ts 生成配置文件 tsc --init 然后發現終端也改變了:

SOCKET編程(3):相關結構體與函數

相關結構體與函數 sockaddr、sockaddr_in結構體 sockaddr和sockaddr_in詳解 struct sockaddr共16字節,協議族(family)占2字節,IP地址和端口號在sa_data字符數組中 /* Structure describing a generic socket address. */ struct sockaddr {__SOCKADDR…

抓大鵝教程電腦端秒通關……

大家好,我是小黃。 最近抓大鵝小程序游戲很火,抓大鵝小游戲是由青島藍飛互娛科技股份有限公司開發并推出的一款休閑益智類三消游戲。在游戲中,玩家需要在特定的“購物籃子”背景下,找到三個相同的物品并將其消除。游戲的玩法簡單…

社工庫信息查詢

此網站需要注冊賬號,新用戶注冊送3點券,每日簽到可獲得1.5點券。也可通過充值來查 我這里有方法可以利用缺陷來無限獲取點券查人

Python 實戰之量化交易

1. Python 實戰之量化交易 2..Python量化交易實戰-04.量化交易系統架構的設計 Python量化交易實戰-04.量化交易系統架構的設計 - 知乎 3.Python量化交易實戰-06.通過PythonAPI獲取股票數據 Python量化交易實戰-06.通過PythonAPI獲取股票數據 - 知乎 3.Python量化交易實戰…

程序員的歸宿。。

大家好,我是瑤琴呀。 相信每個進入職場的人都考慮過自己的職業生涯規劃,在不同的年齡段可能面臨不同挑戰,這點對于 35 的人應該更為感同身受。 對于程序員來說,大部分人的職業道路主要是下面三種:第一條,…

【Delphi 爬蟲庫 6】使用正則表達式提取貓眼電影排行榜top100

正則表達式庫的簡單介紹 正則表達式易于使用,功能強大,可用于復雜的搜索和替換以及基于模板的文本檢查。這對于輸入形式的用戶輸入驗證特別有用-驗證電子郵件地址等。您還可以從網頁或文檔中提取電話號碼,郵政編碼等,在日志文件中…

人生是曠野,不是軌道

最近看到一句話,很喜歡,分享一下。"人生是曠野,不是軌道"。人生不是固定的方程式,也沒有唯一答案,沒有誰生來就應該是什么樣。別太被太多世俗觀念束縛住手腳,每個人都有權利自由生長,…

用友暢捷通T+ keyEdit sql注入漏洞

產品介紹 暢捷通 T 是一款靈動,智慧,時尚的基于互聯網時代開發的管理軟件,主要針對中小型工貿與商貿企業,尤其適合有異地多組織機構(多工廠,多倉庫,多辦事處,多經銷商)的…

朋友圈刷屏的粘土風格照片,你體驗過了嗎?

Remini 的粘土風格真的丑萌丑萌的! 從去年“妙鴨相機”的走紅,到今年Remini的刷屏,其實可以看出大眾對于圖片趣玩的興趣非常大! 一張普通的照片經過工具的處理,一下子變成新風格,讓人眼前一亮。如果你也對…

GPT-SoVits:語音克隆,語音融合

首發網站 https://tianfeng.space 前言 零樣本文本到語音(TTS): 輸入 5 秒的聲音樣本,即刻體驗文本到語音轉換。少樣本 TTS: 僅需 1 分鐘的訓練數據即可微調模型,提升聲音相似度和真實感。跨語言支持&…

信息收集方法合集 第1期

前言 在工作中,經常被問到某個文件怎么下載,原文來自哪里。索性把我知道的所有信息收集方法全部整理一遍,希望對大家有用,如果有幫助到你,非常榮幸,我會堅持分享我的學習、工作經驗。 信息種類&#xff1…

如何用java編寫一個猜數字游戲

我想到用c能編出一個猜數字游戲,于是我就嘗試用java編寫一個 代碼如下: import java.util.Scanner; import java.util.Random;public class GuessTheNumber {public static void main(String[] args) {Scanner scanner new Scanner(System.in);Random…

云啟未來:“云計算與網絡運維精英交流群”與“獨家資料”等你來探索“

作者簡介:一名云計算網絡運維人員、每天分享網絡與運維的技術與干貨。 公眾號:網絡豆云計算學堂 座右銘:低頭趕路,敬事如儀 個人主頁: 網絡豆的主頁????? 🚀 云計算與運維精英交流群誠邀您的加入…

搭建Docker私服鏡像倉庫Harbor

1、概述 Harbor是由VMware公司開源的企業級的Docker Registry管理項目,它包括權限管理(RBAC)、LDAP、日志審核、管理界面、自我注冊、鏡像復制和中文支持等功能。 Harbor 的所有組件都在 Dcoker 中部署,所以 Harbor 可使用 Docker Compose 快速部署。 …

PermissionError: [Errno 13] Permission denied: ‘xx.xlsx‘的解決辦法

我在轉換文件的時候遇到這個報錯,原因是文件名與已有文件名重復了 解決辦法很簡單,如下圖把" " 里的名字換成不重復的,再次允許代碼,會恢復正常

ue引擎游戲開發筆記(37)——實現敵人接收攻擊傷害,并作出反應

1.需求分析: 現在已經顯示造成實際傷害,但敵人對實際傷害并未產生反饋,例如還擊,或者死亡倒地等等,實現敵人對于受擊的反饋。 2.操作實現: 1.思路:在動畫藍圖中添加死亡動畫,并通過…

【姿態解算與濾波算法】

姿態解算 一、主線 姿態表示方式:矩陣表示,軸角表示,歐拉角表示,四元數表示。 慣性測量單元IMU(Inertial Measurement Unit):MPU6050芯片,包含陀螺儀和加速度計,分別測…