目錄
一、設計模式分類
1. 創建型模式(Creational Patterns)
2. 結構型模式(Structural Patterns)
3. 行為型模式(Behavioral Patterns)
真題示例:?
一、設計模式分類
- 架構模式
- 高層設計決策(如C/S結構)。
- 設計模式
- 解決重復發生的問題,提供可復用的解決方案。
- 四要素:模式名稱、問題、解決方案、效果。
- 慣用法
- 與編程語言相關的底層模式(如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)提供了接口規范,這些具體類需要實現這些方法來完成實際的繪制操作。
- 橋接模式適用于抽象和實現可以獨立發展變化的場景,繪圖軟件中圖形種類和繪圖程序都可能不斷擴充,即不希望圖形抽象和繪制實現之間有固定的綁定關系。
- 橋接模式是結構型模式,它主要處理對象之間的結構關系,屬于結構型對象模式,通過將對象的抽象和實現分離來構建靈活的軟件結構。