首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

設計模式精講:抽象工廠模式完整指南

     編輯:關於C

抽象工廠模式

意圖:提供一個創建一系列相關或相互依賴對象的介面,無需指定其具體類。

主要解決:介面選擇問題,系統產品存在多個產品族,但只消費其中某一族。

結構圖

抽象工廠結構圖

關鍵代碼結構

// 抽象產品
interface Shirt { /* ... */ }
interface Trousers { /* ... */ }

// 具體產品族:商務裝
class BusinessShirt implements Shirt { /* ... */ }
class BusinessTrousers implements Trousers { /* ... */ }

// 具體產品族:時尚裝
class FashionShirt implements Shirt { /* ... */ }
class FashionTrousers implements Trousers { /* ... */ }

// 抽象工廠
interface ClothingFactory {
    Shirt createShirt();
    Trousers createTrousers();
}

// 具體工廠
class BusinessFactory implements ClothingFactory {
    public Shirt createShirt() { return new BusinessShirt(); }
    public Trousers createTrousers() { return new BusinessTrousers(); }
}
class FashionFactory implements ClothingFactory {
    public Shirt createShirt() { return new FashionShirt(); }
    public Trousers createTrousers() { return new FashionTrousers(); }
}

生活實例:衣櫃與套裝

一個衣櫃(具體工廠)只存放一套成套衣服(產品族):商務男裝、商務女裝、時尚男裝、時尚女裝。每套包含上衣(抽象產品)和褲子(另一抽象產品)。客戶端只需從特定衣櫃取出整套,保證風格一致。

優缺點分析

優點缺點
保證客戶端始終使用同一產品族對象產品族擴展困難:新增產品需修改抽象工廠及所有具體工廠
將產品族創建邏輯封裝在工廠中增加新產品等級(如加領帶)相對容易

適用場景

  1. QQ 換膚:一整套界面元素一起切換
  2. 跨平台程序生成:不同操作系統對應不同實現族
  3. 數據庫訪問層:不同數據庫廠商提供完整驅動族

注意事項

產品族難擴展,產品等級易擴展。設計時需權衡變化維度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved