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