抽象工廠模式 建立型模式

2021-10-10 11:27:09 字數 2320 閱讀 4170

1、描述

抽象工廠模式是一種建立型設計模式, 它能建立一系列相關的物件, 而無需指定其具體類。

什麼是 「系列物件」? 例如有這樣一組的物件: ​運輸工具+引擎+控制器。 它可能會有幾個變體:

汽車+內燃機+方向盤飛機+噴氣式發動機+操縱桿

如果你的程式中並不涉及產品系列的話, 那就不需要抽象工廠。

優點:封裝性,每個產品的實現類不是高層模組要關心的,它要關心的是什麼?是介面,是抽象,它不關心物件是如何建立出來。

缺點:抽象工廠模式的最大缺點是產品族擴充套件非常困難。它嚴重違反了開閉原則。

2、結構圖

#include #include // 系列產品中的特定產品必須有乙個基礎介面。所有產品變體都必須實現這個介面。

class abstractproducta ;

virtual std::string usefulfunctiona() const = 0;

};// 具體產品由相應的具體工廠建立。

class concreteproducta1 : public abstractproducta

};class concreteproducta2 : public abstractproducta

};// 這是另乙個產品的基礎介面。所有產品都可以互動,但是只有相同具體變體的產

// 品之間才能夠正確地進行互動。

class abstractproductb ;

//產品b可以做自己的事情

virtual std::string usefulfunctionb() const = 0;

//。。但它也可以和產品a配合。抽象工廠確保它建立的所有產品都是相同的變體,因此是相容的。

virtual std::string anotherusefulfunctionb(const abstractproducta &collaborator) const = 0;

};// 具體產品由相應的具體工廠建立。

class concreteproductb1 : public abstractproductb

//產品b1只能和產品a1一起正常工作。然而,它接受abstractproducta的任何例項作為引數。

std::string anotherusefulfunctionb(const abstractproducta &collaborator) const override

};class concreteproductb2 : public abstractproductb

//產品b2只能和產品a2一起正常工作。然而,它接受abstractproducta的任何例項作為引數。

std::string anotherusefulfunctionb(const abstractproducta &collaborator) const override

};// 抽象工廠介面宣告了一組能返回不同抽象產品的方法。這些產品屬於同乙個系列

// 且在高層主題或概念上具有相關性。同系列的產品通常能相互搭配使用。系列產

// 品可有多個變體,但不同變體的產品不能搭配使用。

class abstractfactory ;

// 具體工廠可生成屬於同一變體的系列產品。工廠會確保其建立的產品能相互搭配

// 使用。具體工廠方法簽名會返回乙個抽象產品,但在方法內部則會對具體產品進

// 行例項化。

class concretefactory1 : public abstractfactory

abstractproductb *createproductb() const override

};// 每個具體工廠中都會包含乙個相應的產品變體。

class concretefactory2 : public abstractfactory

abstractproductb *createproductb() const override

};// 客戶端**僅通過抽象型別使用工廠和產品。這讓你無需修改任何工廠或產品子類就能將其傳遞給客戶端**。

void clientcode(const abstractfactory &factory)

int main()

參考:

建立型模式 工廠模式and抽象工廠模式

意圖 定義乙個建立物件的介面,讓其子類自己決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。主要解決 主要解決介面選擇的問題。何時使用 我們明確地計畫不同條件下建立不同例項時。如何解決 讓其子類實現工廠介面,返回的也是乙個抽象的產品。關鍵 建立過程在其子類執行。步驟 建立乙個介面 形狀sh...

建立型模式(抽象工廠模式)

目錄總結 當系統所提供的工廠所需生產的具體產品並不是乙個簡單的物件,而是多個位於不同產品等級結構中屬於不同型別的具體產品時需要使用抽象工廠模式。抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式與工廠方法模式最大的區別在於,工廠方法模式針對的是乙個產品等級結構,而抽象工廠...

建立型模式 抽象工廠模式

抽象工廠 abstractfactory 模式的定義 是一種為訪問類提供乙個建立一組相關或相互依賴物件的介面,且訪問類無須指定所要產品的具體類就能得到同族的不同等級的產品的模式結構。抽象工廠模式是工廠方法模式的公升級版本,工廠方法模式只生產乙個等級的產品,而抽象工廠模式可生產多個等級的產品。產品族 ...