在軟件設計師考試的綜合知識科目中,設計模式是面向對象設計部分的核心考點之一。其中,工廠模式(Factory Pattern) 和 抽象工廠模式(Abstract Factory Pattern) 作為創建型模式的代表,因其在實際開發中的廣泛應用,成為歷年考試的重點與難點。本文將對這兩種模式的考點進行系統分析,幫助考生高效備考。
一、核心概念辨析:從工廠到抽象工廠
- 工廠模式(又稱工廠方法模式)
- 定義:定義一個用于創建對象的接口,但讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。
- 核心角色:抽象產品、具體產品、抽象工廠(或創建者)、具體工廠。
- 核心思想:“單一產品族” 的創建。它將對象的創建過程封裝在工廠類中,客戶端只依賴抽象產品接口和抽象工廠,與具體產品的實現解耦。
- 考試要點:識別符合工廠方法模式結構的類圖;理解其解耦客戶端與具體類、支持“開閉原則”(對擴展開放,對修改封閉)的優點。
- 抽象工廠模式
- 定義:提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。
- 核心角色:抽象產品族、具體產品族、抽象工廠、具體工廠。
- 核心思想:“多個產品族” 的創建。它強調的是“家族”概念,一個具體工廠負責創建屬于同一風格或平臺的一整套產品(例如,不同操作系統下的按鈕、文本框、滾動條等界面組件)。
- 考試要點:區分其與工廠方法模式的關鍵差異(產品族 vs. 單一產品);理解其如何支持產品族的一致性配置;掌握其類圖結構,特別是抽象工廠接口中聲明多個創建方法的特點。
二、關鍵考點與對比分析
考試中常通過選擇題或設計題,考察考生對兩種模式的理解與區分:
| 對比維度 | 工廠模式(Factory Method) | 抽象工廠模式(Abstract Factory) |
| :--- | :--- | :--- |
| 創建目標 | 一種產品對象 | 一族相關的產品對象 |
| 抽象層次 | 通過子類化創建對象(類模式) | 通過對象組合創建對象族(對象模式) |
| 擴展方向 | 增加新的具體產品時,需增加新的具體工廠。 | 增加新的產品族容易(新增具體工廠),但增加新的產品種類困難(需修改所有工廠接口)。 |
| 結構特點 | 一個創建方法對應一個產品。 | 一個工廠接口包含多個創建方法,對應一個產品族中的多個產品。 |
| 典型應用場景 | 連接器(如數據庫連接)、日志記錄器。 | 跨平臺UI組件庫(如Windows/Mac風格控件)、游戲場景(不同風格的角色、武器、建筑)。 |
高頻考點:
1. 情景判斷題:給定一個軟件需求描述(如“需要支持多種數據庫訪問,且未來可能增加新數據庫”),要求選擇最合適的設計模式。通常,工廠模式適用于單一產品類型的變化(如不同的Connection對象),而抽象工廠適用于成套產品的切換(如整套數據庫訪問組件Connection, Command, Adapter)。
2. 類圖識別題:給出UML類圖,要求識別使用的是哪種模式。關鍵看是否存在一個抽象工廠接口,以及該接口是否聲明了多個創建不同產品對象的方法。
3. 優缺點分析:理解抽象工廠模式便于交換產品系列(例如從Windows風格切換到Mac風格),但難以支持新增產品種類(如在UI組件中新增一種“滑塊”控件)的原因。
三、備考策略與解題思路
- 緊扣定義與意圖:遇到題目時,首先回想模式的官方定義和設計意圖。工廠模式的意圖是“將實例化延遲到子類”,抽象工廠的意圖是“創建一系列相關對象”。
- 分析“變化點”:判斷題目中需要封裝的變化是什么。如果變化點是“具體對象的類型”(例如,是創建
MySQLConnection還是OracleConnection),考慮工廠模式。如果變化點是“整個產品家族的風格或平臺”(例如,是創建一套WinButton+WinText還是MacButton+MacText),考慮抽象工廠模式。 - 結合設計原則:兩種模式都體現了依賴倒置原則(依賴抽象,而非具體)和開閉原則。在分析時,可以思考哪種模式能更好地應對題目中描述的未來擴展需求。
四、
掌握工廠模式與抽象工廠模式,不僅是應對軟件設計師考試的關鍵,更是提升實際軟件設計能力的重要一環。考生需從概念本質、結構差異、適用場景及優缺點等多個維度進行深入理解,并通過歷年真題進行鞏固練習,做到舉一反三,方能在考試中從容應對相關題目,為成為一名合格的軟件設計師打下堅實的基礎。