設計模式—23種設計模式重點 表格梳理

設計模式的核心在于提供了相關的問題的解決方案,使得人們可以更加簡單方便的復用成功的設計和體系結構。

按照設計模式的目的可以分為三大類。創建型模式與對象的創建有關;結構型模式處理類或對象的組合;行為型模式對類或對象怎樣交互和怎樣分配職責進行描述。

創建型結構型行為型
工廠模式適配器類

解釋器

模版方法

對象

抽象工廠

生成器

原型

單例模式

適配器對象

橋接

組合

裝飾

外觀

享元

代理

責任鏈

命令

迭代器

中介者

備忘錄

觀察者

狀態

策略

訪問者

創建型設計模式:

創建型設計模式簡要辨析:

工廠

提供一個創建一系列相關或相互依賴對象的接口,而無需指定他們具體的類。

適用于:

·一個系統要獨立于他的產品創建、組合和表示時;

·一個系統要由多個產品系列中的一個來配置時;

·當要強調一系列相關的產品對象的設計以便進行聯合使用時。

抽象工廠

定義一個用于創建對象的接口,讓子類決定實例化哪一個類。

適用于:

·一個類不知道他所必須創建的對象的類的時候;

·當一個類希望由他的子類來指定他所創建的對象的時候;

生成器

將一個復雜對象的構建與他的表示分離,使得同樣的構建過程可以創建不同的表示。

適用于:

·當創建復雜對象的算法應該被獨立于該對象的組成部分以及他們的裝配方式時;

·當構造過程必須允許被構造的對象有不同表示時。

原型

用原型實例指定創建對象的種類,并且通過復制這些原型創建新的對象。

適用于:

·當一個系統應該獨立于他的產品的創建、構成和表示時;

·當要實例化的類是在運行時刻指定時。

單例

保證一個類僅有一個實例,并提供一個訪問他的全局訪問點。

適用于:

·當一個類只能有一個實例且客戶可以從一個眾所周知的訪問點訪問他時;

·當這個唯一的實例應該是通過子類化可擴展的,并且客戶無需更改代碼就能使用一個擴展的實例時。

結構型設計模式:

結構型設計模式簡要辨析:

適配器(類)

將一個類的接口轉換成客戶希望的另一個接口,使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。

適用于:

·想使用一個已經存在的類,而他的接口不符合要求;

·想創建一個可以服用的類,該類可以與其他不相關的類或不可預見的類協同工作;

適配器(對象)·(僅適用于對象Adapter)想使用一個已經存在的子類,但是不可能對每一個都進行子類化以自動匹配他們的接口。對象適配器可以適配他的父類接口。
橋接

將抽象部分與其實現部分分離,使他們都可以獨立的變化。

適用于:

·不希望在抽象和他的實現部分之間有一個固定的綁定關系;

·類的抽象以及他的實現都應該通過生成子類的方法加以擴充;

·對一個抽象的實現部分的修改應對客戶不產生影響,即客戶不必重新編碼。

組合

使得用戶對單個對象和組合對象的使用具有一致性。

適用于:

·想表示對象的部分-整體層次結構;

·希望用戶忽略組合對象與單個對象的不同,用戶將統一的使用組合結構中的所有對象

裝飾器

動態的給一個對象添加一些額外的職責。

適用于:

·動態、透明的給單個對象添加職責;

·處理那些不可撤銷的職責。

外觀

為子系統中一組接口提供一個一致的界面。

適用于:

·要為一個復雜子系統提供一個簡單接口;

·客戶程序與抽象類的實現部分之間存在很大依賴性。

享元

運用共享技術有效的支持大量細粒度的對象。

適用于:

·一個應用程序使用了大量的對象;

·完全由于使用大量的對象,造成很大存儲的開銷;

·對象的大多數狀態都可以變為外部狀態。

代理

為其他對象提供一種代理以控制這個對象的訪問。

適用于:

·遠程代理(Remote Proxy)為一個對象在不同地址空間提供局部代表;

·虛代理(Virtual Proxy)根據需要創建開銷很大的對象

·……

行為設計模式:
解釋器

給定一個語言,定義它的文法的一種表示,并定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。

適用于:

·該文法簡單;

·效率不是一個關鍵問題。

模版方法

定義一個操作中的算法骨架,而將一些步驟延遲到子類中。

適用于:

·一次性實現一個算法的不變的部分,并將可變的行為留給子類來實現;

·各子類中公共的行為應被提取出來并集中到一個公共父類中,避免代碼重復。

責任鏈

使多個對象都有機會處理請求。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,知道有一個對象處理它為止

適用于:

·有多個的對象可以處理一個請求,哪個對象處理該請求運行時刻自動確定;

·想在不明確指令接受者的情況下向多個對象提交一個請求;

·可處理一個請求的對象集合應被動態指定。

命令

將一個請求封裝成一個對象,從而使得可以用不同的請求對客戶端進行參數化。

適用于:

·抽象出待執行的動作以參數化某對象;

·在不同時刻指定、排列和執行請求;

·支持取消操作。

迭代器

提供一種方法順序訪問一個聚合對象中的各個元素,且不需要暴露該對象的內部表示。

適用于:

·訪問一個聚合對象的內容而無需暴露他的內部表示;

·支持對聚合對象的多種遍歷;

·為遍歷不同的聚合結構提供一個統一的接口

中介者

用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變他們之間的交互。

適用于:

·一組對象以定義良好但是復雜的方式進行通信,產生的相互依賴關系結構混亂且難以理解;

·一個對象引用其他很多對象并且直接與這些對象通信,導致難以復用該對象;

·想定制一個分布在多個類中的行為,而又不想生成太多的子類。

備忘錄

在不破壞封裝性的前提下捕獲一個對象的內部狀態,并在對象之外保存這個狀態,這樣以后就可以恢復到原先保存的狀態。

適用于:

·必須保存一個對象在某一個時刻(部分)的狀態;

·直接用接口來讓其他對象得到狀態會暴露對象的實現細節并破壞封裝性。

觀察者

當一個對象的狀態發生改變時,所有依賴于他的對象都得到通知并被自動更新。

適用于:

·當一個對象的改變需要同時改變其他對象,而不知道具體有多少對象有待改變;

·當一個對象必須通知其他對象,而又不能假定其他對象是誰。

狀態

允許一個對象在其內部狀態改變時改變他的行為。對象看起來似乎修改了他的類。

適用于:

·一個對象的行為決定于他的狀態,并且必須在運行時根據狀態改變他的行為。

策略

定義一系列的算法,把它們封裝起來,并且使他們可以相互替換,使得算法可以獨立于使用他們的客戶而變化。

適用于:

·許多相關的類僅僅是行為有異;

·需要使用一個算法的不同變體;

·算法使用客戶不應該知道的數據;

·一個類定義了多種行為。

訪問者

允許在不改變各類元素的類的前提下定義作用于這些元素的新操作。

適用于:

·一個對象結構包含很多類對象,它們有不同的接口,而用戶想對這些對象實施一些依賴于其具體類的操作;

·定義對象結構的類很少改變,但經常需要在此結構上定義新的操作。

創建型有四五,工廠原型單例數;
結構型有六,適配橋接裝飾顧;
代理組合和外觀,享元也是其中屬;
行為型有十一,模板策略責任聚;
命令查詢觀察者,狀態訪問中介續;
迭代器和解釋,行為模式心中記。

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

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

相關文章

CSS實現圖片浮動在底層 div 之上,而不會影響底層 div 的布局和內容

前言&#xff1a;遇到個需求&#xff0c;需要圖片顯示在div之上&#xff0c;但是不占用div的空間布局&#xff0c;網上的答案五花八門&#xff0c;但其實使用css就可以簡單實現&#xff0c;僅以此博客作為記錄 舉個栗子 <div class"container"><img src&qu…

Linux 網絡編程基礎——網絡模型

網絡模型 網絡模型1. OSI七層模型1. 物理層&#xff08;Physical Layer&#xff09;2. 數據鏈路層&#xff08;Data Link Layer&#xff09;3. 網絡層&#xff08;Network Layer&#xff09;4. 傳輸層&#xff08;Transport Layer&#xff09;5. 會話層&#xff08;Session Lay…

研發機構大數據遷移如何保障敏感數據不泄露

隨著云計算和大數據技術的飛速進步&#xff0c;越來越多的企業正試圖通過數據遷移來提升IT基礎設施的效率&#xff0c;減少成本&#xff0c;并增強業務的靈活性。但是&#xff0c;這一過程并非沒有它的挑戰&#xff0c;尤其是在數據安全方面。數據在轉移過程中可能會遭遇黑客攻…

SQL的多表聯查

這里我先附上兩張表的數據&#xff1a; Orders 表: OrderIDCustomerID1321324NULL Customers 表: CustomerIDCustomerName1Alice2Bob3Charlie4David INNER JOIN &#x1f91d; 概念&#xff1a; INNER JOIN&#xff08;內連接&#xff09;返回兩個表中匹配的記錄。如果某條…

解決深度確定問題:使用不相交集合森林

解決深度確定問題&#xff1a;使用不相交集合森林 引言不相交集合森林&#xff08;DSF&#xff09;基礎按秩合并與路徑壓縮深度確定問題的解決方案實現MAKE-TREE修改FIND-SET實現FIND-DEPTH實現GRAFT分析最壞情況運行時間結論參考文獻 引言 在計算機科學中&#xff0c;樹結構是…

時空扭曲:重溫相對論的終極挑戰,探尋真理的腳步

大家都知道&#xff0c;相對論是愛因斯坦提出的劃時代理論&#xff0c;為人類認知時空和引力做出了革命性貢獻。但這個理論真的萬無一失嗎&#xff1f;近日&#xff0c;一項新研究提出了測試時間扭曲的新方法&#xff0c;或許能讓我們重新審視相對論在宇宙大尺度上的適用性。 時…

HTML5好看的通用網站模板源碼

文章目錄 1.設計來源1.1 主界面1.2 模板菜單1 界面1.3 模板菜單2 界面1.4 模板菜單3 界面1.5 下拉菜單1 界面1.6 下拉菜單2 界面1.7 模板菜單4 界面1.8 模板菜單5 界面1.9 界面底部 2.效果和源碼2.1 動態效果2.2 源碼目錄2.3 源代碼 源碼下載 作者&#xff1a;xcLeigh 文章地址…

Python 造數據神器Faker

大家好&#xff0c;在編寫代碼過程中&#xff0c;我們經常需要一些假數據來進行測試或者演示。手動創建這些數據不僅耗時&#xff0c;而且容易出錯。幸運的是&#xff0c;Python有一個非常有用的庫叫做Faker&#xff0c;它可以生成各種類型的假數據&#xff0c;從名字、地址到公…

【驅動】ARM手冊引腳寄存器地址(絕對物理地址)查找(以AM437x為例)

1、問題描述 在配置設備樹時,經常遇到如下宏: XXX_IOPAD(pa, val)實際定義如下: DRA7XX_CORE_IOPAD(pa, val) AM33XX_IOPAD(pa, val) DM816X_IOPAD(pa, val) DM814X_IOPAD(pa, val) AM4372_IOPAD(pa, val)一般注釋中的說明如下: 原文:Macro to allow using the absol…

md5和byte64字符串加密

說明&#xff1a;最近碰到一個需求&#xff0c;網絡請求&#xff0c;傳遞json的時候&#xff0c;必須加密&#xff0c;對字符串加密&#xff0c;然后前端去解密字符串&#xff0c;然后解析json&#xff0c;展示數據&#xff0c;可逆 step1: Md5加密方式 package com.example.…

Java技術精粹:高級面試問題與解答指南(一)

Java 面試問題及答案 問題1&#xff1a;請解釋Java中的多態性&#xff0c;并給出一個例子。 答案&#xff1a; 多態性是Java中的一個重要特性&#xff0c;它允許一個引用類型可以指向多種實際類型的對象&#xff0c;并且可以通過這個引用調用實際對象的方法。多態性主要通過繼…

JAVA:常見的加密算法簡介

一、前言 加密算法是指將明文信息轉變為密文信息的過程&#xff0c;即將信息從可讀形式&#xff08;明文&#xff09;轉換為加密形式&#xff08;密文&#xff09;的過程。在加密過程中&#xff0c;信息通過加密算法和加密密鑰被加密處理&#xff0c;加密后的信息&#xff08;密…

【代碼隨想錄算法訓練Day17】LeetCode 110. 平衡二叉樹、LeetCode 257.二叉樹的所有路徑、LeetCode 404.左葉子之和

Day17 二叉樹第四天 LeetCode 110. 平衡二叉樹【后序遍歷】 平衡二叉樹仍是后序遍歷&#xff0c;就是獲取左右子樹的高度然后作差&#xff0c;如果子樹就不平衡&#xff0c;那么就直接將-1向上傳給父節點&#xff0c;否則該數的高度為左右子樹高度的最大值1。 class Solutio…

day 38 435.無重疊區間 763.劃分字母區間 56. 合并區間 738.單調遞增的數字 968.監控二叉樹

435.無重疊區間 思路 為了使區間盡可能的重疊所以排序來使區間盡量的重疊&#xff0c;使用左邊界排序來統計重疊區間的個數與452. 用最少數量的箭引爆氣球恰好相反。 代碼 class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(a,…

如何在cPanel面板中開啟盜鏈保護

本周有一個客戶&#xff0c;購買Hostease的主機&#xff0c; 客戶購買的是Linux虛擬主機&#xff0c;帶cPanel面板的。詢問我們的在線客服&#xff0c;如何可以防止他的網站上的圖片不被盜用。cPanel的盜鏈保護功能可以幫助客戶防止圖片被盜鏈。 盜鏈&#xff08;Hotlinking&a…

.NET Core與.NET Framework的區別

.NET Core和.NET Framework是微軟提供的兩種主要的開發平臺&#xff0c;用于構建各種應用程序。雖然它們都基于.NET技術&#xff0c;但在架構、平臺支持、性能、開發工具和社區支持等方面存在顯著差異。本文將詳細探討.NET Core和.NET Framework的主要區別&#xff0c;幫助開發…

呆馬科技----構建智能可信的踏勘云平臺

近年來&#xff0c;隨著信息技術的快速發展&#xff0c;各個行業都在積極探索信息化的路徑&#xff0c;以提升工作效率和服務質量。智慧踏勘云平臺是基于區塊鏈和大數據技術構建的全流程智慧可信踏勘解決平臺。平臺集遠程視頻、數據顯示、工作調度、過程記錄為一體&#xff0c;…

有容量限制的車輛路徑規劃問題(Capacitated Vehicle Routing Problem)

在看matlab的時候發現了這篇文章https://www.frontiersin.org/articles/10.3389/fict.2019.00013/full 仔細閱讀一下。(英語渣渣&#xff0c;自學用) The Capacitated Vehicle Routing Problem (CVRP) is an NP-optimization problem (NPO) that has been of great interest …

圖像處理之邊緣檢測(C++)

圖像處理之邊緣檢測&#xff08;C&#xff09; 文章目錄 圖像處理之邊緣檢測&#xff08;C&#xff09;前言一、Roberts算子1.原理2.代碼實現 二、Sobel算子1.原理2.代碼實現 三、Prewitt算子1.原理2.代碼實現 四、Laplacian算子1.原理2.代碼實現 五、LOG算子1.原理2.代碼實現 …

完全匹配企業需求的替代FTP升級軟件怎么找

企業在處理數據傳輸時&#xff0c;效率和安全性是關鍵。盡管傳統的FTP曾被廣泛采用&#xff0c;但因其傳輸慢、安全性不足和難以管理等問題&#xff0c;已不再滿足現代企業的需求。許多企業正在尋找能夠滿足其需求的FTP替代方案&#xff0c;但市場上選擇眾多&#xff0c;找到合…