簡單工廠與工廠模式 Factory

2021-08-31 13:02:28 字數 2102 閱讀 8838

簡單工廠並不是乙個「真正的「模式,可以把它當作一種程式設計習慣。它的最大優點在於工廠類中包含必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴

工廠方法模式:定義了乙個建立物件的介面,但由於類決定要例項化的類是哪乙個。工廠方法讓類把例項化推遲到子類。

要點:1.所有的工廠都是用來封閉物件的建立

2.簡單工廠,雖然不是真正的設計模式,但仍不失為乙個簡單的方法,可以將客戶程式從具體類解耦

3.工廠方法使用繼承,把物件的建立委託給子類,子類實現工廠方法來建立物件

4.所有工廠模式都通過減少應用程式和具體類之間的依賴促進松耦合

5.工廠方法允許類將例項化延遲到子類進行

6.依賴倒置原則,指導我們避免依賴具體型別,而要盡量依賴抽象

設計原則:依賴倒置:依賴抽象,不要依賴具體類

1.變數不可以持有具體類的引用

2.不要讓類派生自具體類

3.不要覆蓋基類中已實現的方法

[img]

pizza.h

#ifndef pizza_h

#define pizza_h

#include

using namespace std;

enum pizzatype;

class pizza

void bake()

void cut()

void box()

};class cheesepizza:public pizza{};

class nystylecheesepizza:public pizza{};

class veggiepizza:public pizza{};

class nystyleveggiepizza:public pizza{};

class clampizza:public pizza{};

class nystyleclampizza:public pizza{};

class pepperonpizza:public pizza{};

class nystylepepperonpizza:public pizza{};

#endif // pizza_h

pizzastore.h

#ifndef pizzastore_h

#define pizzastore_h

#include"pizza.h"

#include"******pizzafactory.h"

class pizzastore

//工廠方法

virtual pizza* createpizza(pizzatype pt)=0;

//由於pizza是抽象的,orderpizza並不知道哪些例項加進來,也就是解耦

pizza* orderpizza(pizzatype pt)

private:

******pizzafactory* mfactory;

};class nypizzastore:public pizzastore}};

#endif // pizzastore_h

******pizzafactory.h

#ifndef ******pizzafactory_h

#define ******pizzafactory_h

#include"pizza.h"

#include

//簡單工廠

class ******pizzafactory}};

class nypizzafactory:public ******pizzafactory}};

#endif // ******pizzafactory_h

main.cpp

#include"pizzastore.h"

int main()

prepare...

bake...

cut...

box...

Java設計模式 抽象工廠模式(factory)

目錄目的 應用例項 提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。工廠模式是最常用的設計模式之一。這種型別的設計模式輸出建立型模式,提供了一種建立物件的最佳方式。在工廠模式中建立物件是通過使用乙個共同 的介面來指向新建立的物件。乙個框架或者系統要由多個子工具系列的乙個工具來配置...

工廠模式 簡單工廠

簡單工廠其實並不是乙個設計模式,反而比較像一種程式設計習慣。我個人的這樣總結簡單工廠 建立乙個類,封裝建立物件的 故事 現在我要開一家披薩店,叫bbk 必敗客 披薩,賣很多種披薩 芝士披薩 榴蓮披薩等等,我有乙個orderpizza string type 方法,根據客戶傳來的type來提供不同的披...

工廠模式 簡單工廠

工廠 處理建立物件的細節。目的 將例項化具體類的 從應用中抽離,或者封裝起來,可以避免干擾應用的其他部分。簡單工廠 簡單工廠其實不是乙個設計模式,反而像一種程式設計習慣。產品實現 desc 產品a public inte ce a class a1 implements a override pub...