欧美人Ⅹzozo特-欧美人成精品-欧美人成影院-欧美人的性交-欧美人的性生活-欧美人妇久久一二级免-欧美人妻综合网-欧美人日比录像-欧美人性交-欧美人性行为免费网站

當前位置: 首頁 > 產品大全 > 設計模式中的工廠家族 簡單工廠、工廠方法與抽象工廠詳解

設計模式中的工廠家族 簡單工廠、工廠方法與抽象工廠詳解

設計模式中的工廠家族 簡單工廠、工廠方法與抽象工廠詳解

在軟件工程領域,設計模式是解決常見設計問題的經典、可復用的方案。其中,創建型模式專注于對象的創建機制,而工廠模式家族(簡單工廠、工廠方法與抽象工廠)則是這一類別中的核心成員,它們致力于讓系統更加靈活、可擴展,并解耦對象的創建與使用。本文將深入探討這三種工廠模式的原理、區別與應用場景。

一、 簡單工廠模式:集中管理的創建入口

核心思想:簡單工廠模式,又稱靜態工廠方法模式,它提供一個專門的類(工廠類)來負責創建其他類的實例。客戶端無需關心對象的具體創建邏輯,只需向工廠傳遞一個參數(如類型標識),即可獲得所需的產品對象。

結構解析
1. 抽象產品(Product):定義產品的公共接口。
2. 具體產品(ConcreteProduct):實現抽象產品接口的具體類。
3. 工廠(Factory):核心類,包含一個靜態的創建方法(如 createProduct(type)),根據傳入的參數判斷并實例化對應的具體產品。

優點
- 職責分離:將對象的創建邏輯從業務代碼中剝離,客戶端代碼更簡潔。
- 初步解耦:客戶端僅依賴于抽象產品和工廠,不直接依賴具體產品。

缺點與局限
- 違反開閉原則:當需要新增產品類型時,必須修改工廠類的創建方法(增加新的 if-elseswitch-case 分支),這不利于擴展。
- 工廠類職責過重:隨著產品種類增多,工廠方法會變得龐大而復雜。

適用場景:產品類型相對固定,且創建邏輯不復雜,變化頻率較低的場景。


二、 工廠方法模式:將創建延遲到子類

核心思想:工廠方法模式是對簡單工廠的進一步抽象和擴展。它定義一個用于創建對象的接口(工廠接口),但將具體創建何種對象的工作推遲到子類中去完成。這樣,核心工廠類(或接口)就不再負責所有產品的創建,而是成為一個抽象的“創建者”。

結構解析
1. 抽象產品(Product):同上。
2. 具體產品(ConcreteProduct):同上。
3. 抽象工廠/創建者(Creator):聲明工廠方法(factoryMethod()),該方法返回一個抽象產品類型的對象。它可能還包含一些依賴于產品的核心業務邏輯。
4. 具體工廠/具體創建者(ConcreteCreator):實現或重寫父類的工廠方法,返回一個具體產品的實例。

優點
- 完全符合開閉原則:要增加新的產品,只需新增對應的具體產品和具體工廠類,無需修改任何現有代碼(包括抽象工廠和客戶端的高層邏輯)。
- 更強的可擴展性:系統更容易加入新的產品族。
- 依賴倒置:高層模塊(客戶端)和低層模塊(具體產品)都依賴于抽象(產品接口和工廠接口)。

缺點
- 類的數量增多:每增加一個產品,就需要增加一個對應的具體工廠類,增加了系統的復雜度。

適用場景
- 當一個類無法預知它必須創建的對象的類時。
- 當一個類希望由其子類來指定它所創建的對象時。
- 需要將產品對象的創建過程與使用過程解耦,并希望系統具備良好的擴展性。


三、 抽象工廠模式:創建產品家族的接口

核心思想:抽象工廠模式提供了一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。它強調的是“產品族”的概念。一個產品族由位于不同產品等級結構(如不同平臺、不同風格)中的一組產品構成。

結構解析
1. 抽象產品族(AbstractProductA, AbstractProductB...):定義一類產品的接口,如“按鈕”、“文本框”。
2. 具體產品族(ConcreteProductA1/B1, ConcreteProductA2/B2...):實現抽象產品接口,構成一個具體的產品家族,如“Windows風格按鈕”和“Windows風格文本框”構成Windows家族。
3. 抽象工廠(AbstractFactory):聲明一組創建抽象產品的方法,每個方法對應一個產品等級。
4. 具體工廠(ConcreteFactory):實現抽象工廠的接口,負責創建一個具體產品族的所有產品。

優點
- 保證產品兼容性:確保客戶端始終只使用同一個產品族中的對象,例如不會混用Windows按鈕和Mac文本框。
- 切換產品族容易:只需更換具體工廠,整個產品族就隨之改變。
- 符合開閉原則(對產品族):增加一個新的產品族(如新增一個“Linux風格”家族)非常方便。

缺點
- 違反開閉原則(對產品等級):難以支持新增產品種類。例如,如果要在現有工廠中增加一個新的產品類型“復選框”(CheckBox),就需要修改所有的抽象工廠和具體工廠接口,這非常麻煩。
- 系統復雜度最高:類的數量急劇增加。

適用場景
- 系統需要獨立于其產品的創建、組合和表示方式。
- 系統需要配置多個產品族中的一個來使用。
- 需要強調一系列相關產品對象的設計以便進行聯合使用。
- 提供一個產品類庫,但只想暴露它們的接口而非實現。


對比

| 特性 | 簡單工廠 | 工廠方法 | 抽象工廠 |
| :--- | :--- | :--- | :--- |
| 核心目的 | 提供一個統一的入口創建對象 | 將對象的創建延遲到子類 | 創建一系列相關或依賴的對象(產品族) |
| 靈活性 | 低(需修改工廠類) | 高(新增具體工廠) | 高(切換產品族) |
| 擴展方向 | 難以擴展新產品類型 | 易于擴展新產品類型 | 易于擴展新產品,難擴展新產品種類 |
| 結構復雜度 | 簡單 | 中等 | 復雜 |
| 典型關系 | 一個工廠 → 多種產品 | 一個工廠(接口/類) → 一種產品 | 一個工廠(接口/類) → 一個產品族 |

演進關系:可以理解為從簡單到復雜、從具體到抽象的過程。
- 簡單工廠是集中化的對象創建器。
- 工廠方法通過引入多態性,解決了簡單工廠違反開閉原則的問題,將創建職責分散。
- 抽象工廠則在工廠方法的基礎上,將關注點從“單個產品對象”提升到了“整個產品家族”,用于創建更復雜的、相互關聯的對象集。

在實際開發中,應根據系統的復雜度、預期的變化維度(是增加新產品種類,還是增加新的產品系列)來選擇合適的工廠模式,切勿為了使用模式而過度設計。

如若轉載,請注明出處:http://m.gxscjt.cn/product/53.html

更新時間:2026-09-05 03:18:00

產品列表

PRODUCT

主站蜘蛛池模板: 久草福利资源在玷 | 成人激情无码 | 欧美a级毛欧美1 | 国语自产精品视频 | 国产免费种子视频 | 91插插| 国产午夜福利六区 | 伊人婷婷五月色 | 欧洲国产在线观看 | 艹逼不卡视频 | 91视频种子| 狠狠91| 人妻在线| 在线浏览黄色网址 | 国产不卡a | 免费高清在线 | 麻豆狼人插3 | 丁香五月免费看 | 性欧美潮喷孕妇 | 91视频观看网站 | 国产福利小视频 | 新夜色福利帮网站 | 手机看片在线 | 综合性爱网 | 欧美福利在线播放 | 老湿机网 | 中文字幕bt原声 | 综合无毒不卡 | 91在线视频观看 | 国产视频在线看 | 日韩2页在线 | 国产精品在线情侣 | 日本中文字幕黄 | 日日操日日撸 | 国产对白91色拍 | 黄色影院中日韩 | 在线看91AV | 三级视频官网 | 国产色情网站 | 亚洲影视在线观看 | 一区二区国产色色 |