《軟件設計師》復習筆記(14.3)——設計模式

目錄

一、設計模式分類

1. 創建型模式(Creational Patterns)

2. 結構型模式(Structural Patterns)

3. 行為型模式(Behavioral Patterns)

真題示例:?


一、設計模式分類

  1. 架構模式
    • 高層設計決策(如C/S結構)。
  2. 設計模式
    • 解決重復發生的問題,提供可復用的解決方案。
    • 四要素:模式名稱、問題、解決方案、效果。
  3. 慣用法
    • 與編程語言相關的底層模式(如C++的引用計數)。

1. 創建型模式(Creational Patterns)

模式名稱(中文)模式名稱(英文)定義記憶關鍵字
抽象工廠模式Abstract Factory提供一個接口,創建一系列相關或相互依賴的對象,無需指定具體類抽象接口
建造者模式Builder將復雜類的表示與構造分離,使相同構建過程能得出不同表示類和構造分離
工廠方法模式Factory Method定義創建對象的接口,由子類決定實例化哪個類(延遲子類實例化)子類決定實例化
原型模式Prototype用原型實例指定創建對象的類型,并通過拷貝創建新對象原型實例,拷貝
單例模式Singleton保證一個類僅有一個實例,并提供全局訪問點唯一實例

2. 結構型模式(Structural Patterns)

模式名稱(中文)模式名稱(英文)定義記憶關鍵字
適配器模式Adapter將一個類的接口轉換成用戶希望的另一種接口,使不兼容的接口協同工作轉換,兼容接口
橋接模式Bridge將抽象部分與實現部分分離,使它們能獨立變化抽象和實現分離
組合模式Composite將對象組合成樹形結構表示“整體-部分”層次,用戶可一致使用單個/組合對象整體-部分,樹形結構
裝飾模式Decorator動態地給對象添加額外職責,比繼承更靈活附加職責
外觀模式Facade為子系統提供統一的高層接口,簡化使用對外統一接口
享元模式Flyweight支持大量細粒度對象的共享細粒度,共享
代理模式Proxy為其他對象提供代理以控制訪問代理控制

3. 行為型模式(Behavioral Patterns)

模式名稱(中文)模式名稱(英文)定義記憶關鍵字
職責鏈模式Chain of Responsibility通過鏈式傳遞請求,減少發送者與接收者耦合,直到有對象處理請求職責鏈,傳遞請求
命令模式Command將請求封裝為對象,支持參數化、隊列、日志和撤銷操作日志記錄,可撤銷
解釋器模式Interpreter定義語言的文法表示,并創建解釋器來解釋句子解釋器,虛擬機
迭代器模式Iterator提供順序訪問聚合對象元素的方法,無需暴露內部結構順序訪問,不暴露內部
中介者模式Mediator封裝對象間交互,降低耦合,使交互可獨立變化不直接引用
備忘錄模式Memento在不破壞封裝的前提下保存對象狀態,后續可恢復保存,恢復
觀察者模式Observer定義一對多依賴關系,當對象狀態變化時自動通知所有依賴對象通知,自動更新
狀態模式State允許對象在內部狀態改變時改變行為狀態變成類
策略模式Strategy封裝一系列算法,使其可互相替換,獨立于用戶變化算法替換
模板方法模式Template Method定義算法骨架,將某些步驟延遲到子類實現子類重定義步驟
訪問者模式Visitor在不改變元素類的前提下定義作用于元素的新操作數據和操作分離

真題示例:?

設計模式描述了一個出現在特定設計語境中的設計再現問題,并為它的解決方案提供了一個經過充分驗證的通用方案,不同的設計模式關注解決不同的問題。例如,抽象工廠模式提供一個接口,可以創建一系列相關或相互依賴的對象,而無需指定它們具體的類,它是一種(54)模式;(55)模式將類的抽象部分和它的實現部分分離出來,使它們可以獨立變化,它屬于(56)模式;(57)模式將一個請求封裝為一個對象,從而可用不同的請求對客戶進行參數化,將請求排隊或記錄請求日志,支持可撤銷的操作。

(54)A.組合型 B.結構型 C.行為型 D.創建型

(55)A.Bridge B.Proxy C.Prototype D.Adapter

(56)A.組合型 B.結構型 C.行為型 D.創建型

(57)A.Command B.Facade C.Memento D.Visitor

  • 創建型模式主要用于創建對象,抽象工廠模式提供一個接口來創建一系列相關或相互依賴的對象,屬于創建型模式。創建型模式關注點在于對象的創建過程和方式,比如單例模式保證一個類僅有一個實例等。
  • Bridge(橋接)模式將類的抽象部分和它的實現部分分離,使它們可以獨立變化 。例如在圖形繪制系統中,抽象的圖形(如圓形、矩形等)和具體的繪制實現(如基于不同繪圖庫的繪制)可以分別進行擴展和修改。
  • 橋接模式屬于結構型模式。結構型模式主要用于處理類或對象的組合,研究如何將類或者對象結合在一起形成更大的結構,比如代理模式、組合模式等也都是結構型模式。
  • Command(命令)模式將一個請求封裝為一個對象,這樣可以用不同的請求對客戶進行參數化,還能將請求排隊或記錄請求日志,支持可撤銷的操作。比如在文本編輯器中,“撤銷”操作就可以用命令模式實現,將每次的編輯操作封裝成命令對象。

欲開發一個繪圖軟件,要求使用不同的繪圖程序繪制不同的圖形,該繪圖軟件的擴展性要求將不斷擴充新的圖形和新的繪圖程序,以繪制直線和圖形為例,得到如下圖所示的類圖,該設計采用( )模式將抽象部分與其實現部分分離,使它們都可以獨立的變化。其中( )定義了實現類接口,該模式適用于( )的情況,該模式屬于( )模式。

A、適配器(adapter) B、裝飾(Decorator) C、橋接(Bridge) D、組合(composite)

A、Shape B、Circle和Rectangle C、V1Drawing和V2Drawing D、Drawing

A、不希望在抽象和它的實現部分之間有一個固定判定關系

B、想表示對象的部分 - 整體層次結構.

C、想使用一個已經存在的類,而它的接口不符合要求

D、在不影響其他對象的情況下,以動態透明的方式給單個對象添加職責

A、創建型對象 B、結構型對象 C、行為型對象 D、結構型類

  • 從類圖中可以看出,Shape類代表圖形的抽象部分,Drawing類及其子類(V1Drawing、V2Drawing)代表繪制的實現部分,通過將兩者分離,使得圖形和繪制方式都可以獨立變化,符合橋接模式的特點。
  • Drawing類中定義了tdrawLine()和tdrawCircle()等方法,為具體的繪制實現類(V1Drawing、V2Drawing)提供了接口規范,這些具體類需要實現這些方法來完成實際的繪制操作。
  • 橋接模式適用于抽象和實現可以獨立發展變化的場景,繪圖軟件中圖形種類和繪圖程序都可能不斷擴充,即不希望圖形抽象和繪制實現之間有固定的綁定關系。
  • 橋接模式是結構型模式,它主要處理對象之間的結構關系,屬于結構型對象模式,通過將對象的抽象和實現分離來構建靈活的軟件結構。

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

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

相關文章

HarmonyOS:使用Refresh組件實現頁面下拉刷新上拉加載更多

一、前言 可以進行頁面下拉操作并顯示刷新動效的容器組件。 說明 該組件從API Version 8開始支持。后續版本如有新增內容,則采用上角標單獨標記該內容的起始版本。該組件從API Version 12開始支持與垂直滾動的Swiper和Web的聯動。當Swiper設置loop屬性為true時&…

55、?屏加載?屏怎么進?優化

答: (1)使?CDN 減?代碼體積,加快請求速度; (2)SSR通過服務端把所有數據全部渲染完成再返回給客?端; (3) 路由懶加載,當??訪問的時候,再加載相應模塊; (4) 使?外…

什么是Python單例模式

什么是Python單例模式 Python單例模式是一種創建型設計模式,目的是確保一個類僅有一個實例,并提供一個全局訪問點來獲取該實例。以下從作用和示例進行介紹: 作用 控制資源使用:避免對系統資源的重復消耗,像數據庫連接、文件句柄等稀缺資源,只創建一個實例來管理使用,防…

Java 2025:解鎖未來5大技術趨勢,Kotlin融合AI新篇

各位Java開發者們好!🚀 2025年的Java世界正在經歷一場前所未有的技術變革。作為深耕Java領域多年的技術博主,今天我將帶大家深入探索Java生態即將迎來的5大技術趨勢,特別是Kotlin的深度融合和AI技術的新篇章。準備好了嗎&#xff…

計算機視覺cv2入門之車牌號碼識別

前邊我們已經講解了使用cv2進行圖像預處理與邊緣檢測等方面的知識,這里我們以車牌號碼識別這一案例來實操一下。 大致思路 車牌號碼識別的大致流程可以分為這三步:圖像預處理-尋找車牌輪廓-車牌OCR識別 接下來我們按照這三步來進行講解。 圖像預處理 …

CExercise_13_1排序算法_3快速排序算法,包括單向分區以及雙向分區

題目: 請手動實現快速排序算法,包括單向分區以及雙向分區: // 單向分區快速排序算法 void quick_sort_one_way(int arr[], int len); //雙向分區快速排序算法 void quick_sort_two_way(int arr[], int len); 關鍵點 分析: &#x…

FPGA-VGA

目錄 前言 一、VGA是什么? 二、物理接口 三、VGA顯示原理 四、VGA時序標準 五、VGA顯示參數 六、模塊設計 七、波形圖設計 八、彩條波形數據 前言 VGA的FPGA驅動 一、VGA是什么? VGA(Video Graphics Array)是IBM于1987年推出的…

Linux和Ubuntu的驅動適配情況

舊 一、Linux Yocto3.0 二、Ubuntu 1.驅動 1.rtc正常 2.led正常 3.加密芯片正常 4.硬件看門狗不行,驅動已經適配好,等硬件修復后,直接使用腳本就可以 5.千兆網口可以,兩個百兆網口不行 6.USB上面和下面都可以(插u盤…

Python 文本和字節序列(處理文本文件)

本章將討論下述話題: 字符、碼位和字節表述 bytes、bytearray 和 memoryview 等二進制序列的獨特特性 全部 Unicode 和陳舊字符集的編解碼器 避免和處理編碼錯誤 處理文本文件的最佳實踐 默認編碼的陷阱和標準 I/O 的問題 規范化 Unicode 文本,進行安全的…

【Android學習記錄】工具使用

文章目錄 一. 精準找視圖資源ID1. 準備工作2. 使用 uiautomator 工具2.1. 獲取設備的窗口內容2.2. Pull XML 文件2.3. 查看 XML 文件 3. 直接使用 ADB 命令4. 使用 Android Studio 的 Layout Inspector總結 二. adb shell dumpsys activity1. 如何使用 ADB 命令2. 輸出內容解析…

Kafka系列之:計算kafka集群topic占的存儲大小

Kafka系列之:計算kafka集群topic占的存儲大小 topic存儲數據格式統計topic存儲大小定時統計topic存儲大小topic存儲數據格式 單位是字節大小 size_bytes{directory="/data/datum/kafka/optics-all" } 782336計算topic存儲大小腳本邏輯是: 計算指定目錄或文件的大小…

C# 高級編程:Lambda 表達式

在 C# 的高級編程中,Lambda 表達式是一個強大而靈活的工具,廣泛應用于 LINQ 查詢、委托、事件處理以及函數式編程等多個領域。它不僅使代碼更簡潔、表達更直接,而且在某些場景中能極大提高代碼的可讀性與可維護性。本文將從 Lambda 表達式的基本語法入手,深入探討其原理、常…

《軟件設計師》復習筆記(11.5)——測試原則、階段、測試用例設計、調試

目錄 1. 測試基礎概念 2. 測試方法分類 3. 測試階段 真題示例: 題目1 題目2 題目3 4. 測試策略 5. 測試用例設計 真題示例: 6. 調試與度量 真題示例: 1. 測試基礎概念 定義:系統測試是為發現錯誤而執行程序的過程&…

方案解讀:虛擬電廠標桿項目整體建設方案【附全文閱讀】

在電力市場背景下,傳統電力現貨市場存在電能定價不合理、分布式電源并網困難等問題。本虛擬電廠標桿項目旨在研究全時間尺度虛擬電廠智能管控關鍵技術,通過研制虛擬電廠控制器樣機、開發運行管理平臺,實現對分布式能源的合理優化配置。項目內容涵蓋虛擬調控、建設目標、建設…

PyTorch 深度學習實戰(37):分布式訓練(DP/DDP/Deepspeed)實戰

在上一篇文章中,我們探討了混合精度訓練與梯度縮放技術。本文將深入介紹分布式訓練的三種主流方法:Data Parallel (DP)、Distributed Data Parallel (DDP) 和 DeepSpeed,幫助您掌握大規模模型訓練的關鍵技術。我們將使用PyTorch在CIFAR-10分類…

OpenAI重返巔峰:o3與o4-mini引領AI推理新時代

引言 2025年4月16日,OpenAI發布了全新的o系列推理模型:o3和o4-mini,這兩款模型被官方稱為“迎今為止最智能、最強大的大語言模型(LLM)”。它們不僅在AI推理能力上實現了質的飛躍,更首次具備了全面的工具使…

【AI插件開發】Notepad++ AI插件開發實踐:支持配置界面

一、引用 此前的系列文章已基本完成了Notepad的AI插件的功能開發,但是此前使用的配置為JSON配置文件,不支持界面配置。 本章在此基礎上集成支持配置界面,這樣不需要手工修改配置文件,直接在界面上操作,方便快捷。 注…

Android12 ServiceManager::addService源碼解讀

源碼 Status ServiceManager::addService(const std::string& name, const sp<IBinder>& binder, bool allowIsolated, int32_t dumpPriority) {auto ctx mAccess->getCallingContext();// apps cannot add servicesif (multiuser_get_app_id(ctx.uid) >…

第十四節:實戰場景-何實現全局狀態管理?

React.createElement調用示例 Babel插件對JSX的轉換邏輯 React 全局狀態管理實戰與 JSX 轉換原理深度解析 一、React 全局狀態管理實現方案 1. Context API useReducer 方案&#xff08;輕量級首選&#xff09; // 創建全局 Context 對象 const GlobalContext createConte…

第四十八篇 電信行業數倉建設實戰指南:從架構設計到場景落地

目錄 一、云原生架構設計實戰1.1 計算存儲分離架構搭建1.2 實時離線融合方案 二、維度建模深度解析2.1 電信業務建模方法論2.2 典型模型設計示例 三、ETL流程優化實踐3.1 增量同步技術選型3.2 數據清洗規范 四、核心場景實現方案4.1 用戶流失預警模型 五、數據治理實施指南5.1 …