1.每日設計模式-理論

目錄

一、什么是設計模式

二、設計原則

三、設計模式的種類


代碼地址:patterns: 每日設計模式

一、什么是設計模式

軟件設計模式(Design Pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結,使用設計模式是為了可重用代碼、讓代碼更容易被他人理解并且保證代碼可靠性。

一句大白話可以總結:在一定環境下,用固定套路解決問題。

二、設計原則

對于面向對象軟件系統的設計而言,在支持可維護性的同時,提高系統的可復用性是一個至關重要的問題,如何同時提高一個軟件系統的可維護性和可復用性是面向對象設計需要解決的核心問題之一。在面向對象設計中,可維護性的復用是以設計原則為基礎的。每一個原則都蘊含一些面向對象設計的思想,可以從不同的角度提升一個軟件結構的設計水平。

面向對象設計原則為支持可維護性復用而誕生,這些原則蘊含在很多設計模式中,它們是從許多設計方案中總結出的指導性原則。面向對象設計原則也是我們用于評價一個設計模式的使用效果的重要指標之一。

原則的目的: 高內聚,低耦合

名稱定義
單一職責原則類的職責單一,對外只提供一種功能,而引起類變化的原因都應該只有一個。
(Single Responsibility Principle, SRP)
★★★★☆
開閉原則類的改動是通過增加代碼進行的,而不是修改源代碼。
(Open-Closed Principle, OCP)
★★★★★
里氏代換原則任何抽象類(interface接口)出現的地方都可以用他的實現類進行替換,實際就是虛擬機制,語言級別實現面向對象功能。
(Liskov Substitution Principle, LSP
★★★★★
依賴倒轉原則依賴于抽象(接口),不要依賴具體的實現(類),也就是針對接口編程。
(Dependence Inversion Principle, DIP)
★★★★★
接口隔離原則不應該強迫用戶的程序依賴他們不需要的接口方法。一個接口應該只提供一種對外功能,不應該把所有操作都封裝到一個接口中去。
(Interface Segregation Principle, ISP
★★☆☆☆
合成復用原則如果使用繼承,會導致父類的任何變換都可能影響到子類的行為。如果使用對象組合,就降低了這種依賴關系。對于繼承和組合,優先使用組合。
(Composite Reuse Principle, CRP)
★★★★☆
迪米特法則一個對象應當對其他對象盡可能少的了解,從而降低各個對象之間的耦合,提高系統的可維護性。例如在一個程序中,各個模塊之間相互調用時,通常會提供一個統一的接口來實現。這樣其他模塊不需要了解另外一個模塊的內部實現細節,這樣當一個模塊內部的實現發生改變時,不會影響其他模塊的使用。(黑盒原理)
(Law of Demeter, LoD
★★★☆☆

三、設計模式的種類

  1. 創建型(Creational)模式:如何創建對象;
  2. 結構型(Structural )模式:如何實現類或對象的組合;
  3. 行為型(Behavioral)模式:類或對象怎樣交互以及怎樣分配職責。

有一個“簡單工廠模式”不屬于GoF 23種設計模式,但大部分的設計模式書籍都會對它進行專門的介紹。

模式名稱模式名稱作用
創建型模式 Creational Pattern單例模式是保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。
-6★★★★☆
簡單工廠模式通過專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。
★★★☆☆
工廠方法模式定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類中。
★★★★★
抽象工廠模式提供一個創建一系列相關或者相互依賴的接口,而無需指定它們具體的類。
★★★★★
原型模式用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象。
★★★☆☆
建造者模式將一個復雜的構建與其表示相分離,使得同樣的構建過程可以創建不同的表示。
★★☆☆☆
結構型模式適配器模式將一個類的接口轉換成客戶希望的另外一個接口。使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
Structural Pattern★★★★☆
-7橋接模式將抽象部分與實際部分分離,使它們都可以獨立的變化。
★★★☆☆
組合模式將對象組合成樹形結構以表示“部分--整體”的層次結構。使得用戶對單個對象和組合對象的使用具有一致性。
★★☆☆☆
裝飾模式動態的給一個對象添加一些額外的職責。就增加功能來說,此模式比生成子類更為靈活。
★★★☆☆
外觀模式為子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
★★★★★
享元模式以共享的方式高效的支持大量的細粒度的對象。
★☆☆☆☆
代理模式為其他對象提供一種代理以控制對這個對象的訪問。
★★★★☆
行為型模式職責鏈模式在該模式里,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求,這使得系統可以在不影響客戶端的情況下動態地重新組織鏈和分配責任。
Behavioral Pattern★★☆☆☆
-11命令模式將一個請求封裝為一個對象,從而使你可用不同的請求對客戶端進行參數化;對請求排隊或記錄請求日志,以及支持可撤銷的操作。
★★★★☆
解釋器模式如何為簡單的語言定義一個語法,如何在該語言中表示一個句子,以及如何解釋這些句子。
★☆☆☆☆
迭代器模式提供了一種方法順序來訪問一個聚合對象中的各個元素,而又不需要暴露該對象的內部表示。
★☆☆☆☆
中介者模式定義一個中介對象來封裝系列對象之間的交互。終結者使各個對象不需要顯示的相互調用 ,從而使其耦合性松散,而且可以獨立的改變他們之間的交互。
★★☆☆☆
備忘錄模式是在不破壞封裝的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態。
★★☆☆☆
觀察者模式定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并被自動更新。
★★★★★
狀態模式對象的行為,依賴于它所處的狀態。
★★☆☆☆
策略模式準備一組算法,并將每一個算法封裝起來,使得它們可以互換。
★★★★☆
模板方法模式得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
★★★☆☆
訪問者模式表示一個作用于某對象結構中的各元素的操作,它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。
★☆☆☆☆

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

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

相關文章

AI大模型的口語練習APP

開發一個使用第三方大模型的口語練習APP涉及多個步驟,從需求分析到部署上線。以下是詳細的開發流程和關鍵步驟,通過系統化的流程和合適的技術選型,可以有效地開發出一個功能豐富、用戶體驗良好的口語練習APP。北京木奇移動技術有限公司&#…

網絡初識 二

一、TCP/IP五層協議 -> 應用層 : 傳輸的數據在應用程序中如何使用 -> 傳輸層 : 關注的是通信的起點終點 -> 網絡層 : 關注的是通信中的路線規劃 -> 數據鏈路層 : 關注的是相鄰節點之間的通信細節 -> 物理層 : 網絡通信的基礎設施 說是五層,實際上下面…

Qt案例練習(有源碼)

項目源碼和資源:Qt案例練習: qt各種小案例練習,有完整資源和完整代碼 1.案例1 項目需求:中間為文本框,當點擊上面的復選框和單選按鈕時,文本框內的文本會進行相應的變化。 代碼如下: #include "dialog.h" …

C++的數據結構(十):AVL樹

AVL樹是一種自平衡的二叉搜索樹,得名于其發明者G.M. Adelson-Velsky和E.M. Landis。在AVL樹中,任何節點的兩個子樹的高度最多相差1,這種性質確保了AVL樹的查找、插入和刪除操作的時間復雜度接近O(log n)。 AVL樹是一種二叉搜索樹,…

MongoDB基礎入門到深入(七)建模、調優

文章目錄 系列文章索引十一、MongoDB開發規范十二、MongoDB調優1、三大導致MongoDB性能不佳的原因2、影響MongoDB性能的因素3、MongoDB性能監控工具(1)mongostat(2)mongotop(3)Profiler模塊(4&a…

K8S認證|CKA題庫+答案| 16. 升級集群

16、升級集群 CKA v1.29.0模擬系統免費下載試用: 百度網盤:https://pan.baidu.com/s/1vVR_AK6MVK2Jrz0n0R2GoQ?pwdwbki 題目: 您必須在以下Cluster/Node上完成此考題: Cluster Ma…

CTF網絡安全大賽簡單web題目:eval

題目來源于&#xff1a;bugku 題目難度&#xff1a;簡單 一道簡單web的題目 題目源代碼&#xff1a; <?phpinclude "flag.php";$a $_REQUEST[hello];eval( "var_dump($a);");show_source(__FILE__); ?> 這個PHP腳本有幾個關鍵部分&#xff0c;但…

太陽誘電:順應時代需求的新型電容器為何能在全球得到廣泛應用(下)

隨著汽車電動化和電子控制化的進展&#xff0c;車載計算機和電氣部件也在逐漸向大功率化的方向發展。而構成這些車載設備電源電路的電子元器件也必須隨之進行技術革新。太陽誘電集團攜手全資子公司ELNA&#xff0c;開發并供應新型電容器“導電性高分子混合鋁電解電容器”&#…

【熱門話題】一文帶你讀懂公司是如何知道張三在脈脈上發了“一句話”的

按理說呢&#xff0c;A公司和脈脈屬于不同的平臺&#xff0c;而且脈脈上大家可以匿名發言&#xff0c;所以&#xff0c;即便我坐在你邊上&#xff0c;我發了一句話上去&#xff0c;你也不知道是誰發的。但通過一些技術&#xff0c;我們卻可以分析出&#xff0c;公司是如何知道張…

IOC控制反轉

IOC IOC&#xff0c;全稱為Inversion of Control(控制反轉)&#xff0c;是一種設計原則&#xff0c;它反轉了傳統編程中的控制流程。在傳統的編程模式中&#xff0c;組件之間的依賴關系是由組件自身在內部創建和維護的。而在控制反轉模式中&#xff0c;這種依賴關系由外部容器(…

SSH 免密登錄vscode 附debug 免密登錄失敗問題排查

SSH 免密登錄vscode 附debug 關鍵詞 &#xff1a;vscode ssh ssh無法免密登錄 ssh免密登錄失敗 1 sshd 的配置文件/etc/ssh/sshd_config&#xff0c; 確保公鑰登錄開啟 PubkeyAuthentication yes2 生成公鑰并上傳 ssh-keygen找到本地 .ssh/id_rsa.pub 將其中文本內容搞到…

PS —— 制作證件照

PS —— 制作證件照 裁剪工具魔棒工具油漆桶工具擴展畫布 老是看編程&#xff0c;會有些疲勞&#xff0c;這個專欄我會放一些其他的知識&#xff0c;我們今天利用PS制作證件照&#xff08;注意&#xff0c;這里一些ps的基礎操作我不會很展開的去講&#xff09;&#xff1a; 裁…

Redisson分布式Redis鎖,tryLock方法詳解

在 Java 中&#xff0c;RLock 是 Redisson 庫中提供的一個分布式鎖接口&#xff0c;用于實現基于 Redis 的分布式鎖。RLock 的 tryLock 方法用于嘗試獲取鎖&#xff0c;并在特定的時間內等待獲取鎖。 方法簽名如下&#xff1a; boolean tryLock(long waitTime, long leaseTim…

WPF關鍵組件代碼示例

通過一個綜合示例代碼&#xff0c;展示WPF的關鍵組件&#xff0c;包括XAML、控件、數據綁定、樣式和模板以及動畫。這個示例創建一個簡單的WPF應用程序&#xff0c;包含一個文本框、按鈕和列表框&#xff0c;實現數據綁定、自定義樣式和模板&#xff0c;以及按鈕點擊后的動畫效…

深入解析R語言的貝葉斯網絡模型:構建、優化與預測;INLA下的貝葉斯回歸;現代貝葉斯統計學方法;R語言混合效應(多水平/層次/嵌套)

目錄 ①基于R語言的貝葉斯網絡模型的實踐應用 ②R語言貝葉斯方法在生態環境領域中的應用 ③基于R語言貝葉斯進階:INLA下的貝葉斯回歸、生存分析、隨機游走、廣義可加模型、極端數據的貝葉斯分析 ④基于R語言的現代貝葉斯統計學方法&#xff08;貝葉斯參數估計、貝葉斯回歸、…

react使用AntV

AntV使用&#xff08;https://antv.antgroup.com/&#xff09; import React, { useEffect } from "react"; // npm install antv/g2 import { Chart } from "antv/g2"; const Charts () > { function Ccc() { // 準備數據 const data [ { genre: …

【Linux】腳本shell script

shell是與Linux交互的基本工具 shell script是針對shell所寫的腳本&#xff0c;解釋執行&#xff0c;無需編譯 注意事項 指令的執行是從上而下、從左而右的分析與執行&#xff1b; 指令、選項與參數間的多個空白都會被忽略掉&#xff1b; 空白行也將被忽略掉&#xff0c;并且…

抽象工廠模式(AbstractFactoryPattern)

文章目錄 1.抽象工廠模式定義2.UML類圖3.抽象工廠模式具體實現工廠模式實現單一產品族抽象工廠實現多產品族產品類工廠類使用 4.抽象工廠模式優缺點 1.抽象工廠模式定義 提供一個創建一系列相關或相互依賴對象的接口&#xff0c;而無需指定它們具體的類。 工廠方法模式是單一產…

2024電工杯B題食譜評價與優化模型思路代碼論文分析

2024年電工杯數學建模競賽B題論文和代碼已完成&#xff0c;代碼為B題全部問題的代碼&#xff0c;論文包括摘要、問題重述、問題分析、模型假設、符號說明、模型的建立和求解&#xff08;問題1模型的建立和求解、問題2模型的建立和求解、問題3模型的建立和求解&#xff09;、模型…

正點原子[第二期]Linux之ARM(MX6U)裸機篇學習筆記-17講 定時器按鍵消抖

前言&#xff1a; 本文是根據嗶哩嗶哩網站上“正點原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸機篇”視頻的學習筆記&#xff0c;在這里會記錄下正點原子 I.MX6ULL 開發板的配套視頻教程所作的實驗和學習筆記內容。本文大量引用了正點原子教學視頻和鏈接中的內容。…