1. 程式人生 > >c++設計模式:簡單工廠模式(Simple Factory Pattern)

c++設計模式:簡單工廠模式(Simple Factory Pattern)

 定義:

從設計模式的型別上來說,簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法(StaticFactory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠物件決定創建出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的一個特殊實現。

場景:

我們要開一家比薩商店,定義了一個簡單的披薩工廠,可以根據客戶的需要製作芝士披薩、辣腸比薩、蛤蜊披薩、素食披薩。根據傳入的披薩型別從披薩工廠生產出客戶所需要的披薩。

類圖:

c++程式碼如下:

複製程式碼
#include <iostream>
#include <string
> #include <vector> using namespace std; class PizzaType { public: enum EPizzaType{cheese,pepperoni,clam,veggie}; }; class Pizza { public: virtual ~Pizza() {}; string getName(); void prepare(); void bake(); void cut(); void box(); protected: string name; string
dough; string sauce; vector<string> toppings; }; class CheesePizza : public Pizza { public: CheesePizza(); }; class PepperoniPizza : public Pizza { public: PepperoniPizza(); }; class ClamPizza : public Pizza { public: ClamPizza(); }; class VeggiePizza : public Pizza { public
: VeggiePizza(); }; class SimplePizzaFactory { public: Pizza* createPizza(PizzaType::EPizzaType type); }; class PizzaStore { private: SimplePizzaFactory factory; public: Pizza* orderPizza(PizzaType::EPizzaType type); }; string Pizza::getName() { return name; } void Pizza::prepare() { printf("Preparing %s\n",name.c_str()); } void Pizza::bake() { printf("Baking %s\n",name.c_str()); } void Pizza::cut() { printf("Cutting %s\n",name.c_str()); } void Pizza::box() { printf("Boxing %s\n",name.c_str()); } CheesePizza::CheesePizza() { name = "Cheese Pizza"; dough = "Regular Crust"; sauce = "Marinara Pizza Sauce"; toppings.push_back("Fresh Mozzarella"); toppings.push_back("Parmesan"); } PepperoniPizza::PepperoniPizza() { name = "Pepperoni Pizza"; dough = "Crust"; sauce = "Marinara sauce"; toppings.push_back("Sliced Pepperoni"); toppings.push_back("Sliced Onion"); toppings.push_back("Grated parmesan cheese"); } ClamPizza::ClamPizza() { name = "Clam Pizza"; dough = "Thin crust"; sauce = "White garlic sauce"; toppings.push_back("Clams"); toppings.push_back("Grated parmesan cheese"); } VeggiePizza::VeggiePizza() { name = "Veggie Pizza"; dough = "Crust"; sauce = "Marinara sauce"; toppings.push_back("Shredded mozzarella"); toppings.push_back("Grated parmesan"); toppings.push_back("Diced onion"); toppings.push_back("Sliced mushrooms"); toppings.push_back("Sliced red pepper"); toppings.push_back("Sliced black olives"); } Pizza* SimplePizzaFactory::createPizza(PizzaType::EPizzaType type) { Pizza* pizza = NULL; if (PizzaType::cheese == type) { pizza = new CheesePizza(); } else if (PizzaType::pepperoni == type) { pizza = new PepperoniPizza(); } else if (PizzaType::clam == type) { pizza = new ClamPizza(); } else if (PizzaType::veggie == type) { pizza = new VeggiePizza(); } return pizza; } Pizza* PizzaStore::orderPizza(PizzaType::EPizzaType type) { Pizza* pizza = NULL; pizza = factory.createPizza(type); pizza->prepare(); pizza->bake(); pizza->cut(); pizza->box(); return pizza; } int main() { PizzaStore pizzaStore; Pizza* pCheesePizza = pizzaStore.orderPizza(PizzaType::cheese); Pizza* pPepperoniPizza = pizzaStore.orderPizza(PizzaType::pepperoni); Pizza* pClamPizza = pizzaStore.orderPizza(PizzaType::clam); Pizza* pVeggiePizza = pizzaStore.orderPizza(PizzaType::veggie); delete pCheesePizza; delete pPepperoniPizza; delete pClamPizza; delete pVeggiePizza; return 0; }
複製程式碼

執行後結果如下:

Preparing Cheese Pizza
Baking Cheese Pizza
Cutting Cheese Pizza
Boxing Cheese Pizza
Preparing Pepperoni Pizza
Baking Pepperoni Pizza
Cutting Pepperoni Pizza
Boxing Pepperoni Pizza
Preparing Clam Pizza
Baking Clam Pizza
Cutting Clam Pizza
Boxing Clam Pizza
Preparing Veggie Pizza
Baking Veggie Pizza
Cutting Veggie Pizza
Boxing Veggie Pizza

參考圖書:《Head First 設計模式》

相關推薦

c++設計模式簡單工廠模式(Simple Factory Pattern)

 定義: 從設計模式的型別上來說,簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法(StaticFactory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠物件決定創建出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,

C#設計模式之創建類模式簡單工廠模式

div main bst http fin 想要 對象 sqlserver 關鍵字 這是記錄設計模式種的創建型模式的第一篇,所以,在開頭要說一些關於創建型模式的含義和意義。 創建型模式 軟件系統在運行時,類將被實例化成對象,並由這些被創建的對象協作完成系統中要求的各項業務功

設計模式(2)——建立型——工廠相關簡單工廠Simple factory),工廠方法(Factory method),抽象工廠(Abstract factory

概要 這裡試圖描述23個設計模式中的兩個工廠(Factory)相關的設計模式:工廠方法(Factorymethod),抽象工廠(Abstract factory)。 注意點: 這兩個都屬於建立型設計模式。 由於這兩個設計模式都

大話設計模式簡單工廠模式

    由於面向過程程式設計造成的程式碼膨脹問題越來越嚴重,使其維護的代價高,靈活性很低。為了使程式碼易維護、易擴充套件、易複用和靈活性好,所以我們在採用面向物件程式設計的時候,防止採用面向物件的語言實際上卻做著面向過程的事兒,更需要採用某種設計模式,核心就是使程式變得高內

設計模式簡單工廠模式

簡單工廠模式又叫做靜態工廠方法模式,不屬於23種設計模式中的一種。 簡單工廠模式是工廠模式家族中最簡單的一種。 簡單工廠模式具有以下優點: 讓外界可以從直接建立具體物件的尷尬局面解脫出來,僅僅負責“消費”物件就可以了 外界不必管這些物件究竟如何建立及組織

工廠模式簡單工廠模式工廠方法模式、抽象工廠模式

工廠模式適合凡是出現大量物件需要建立,而且這些物件擁有相同的介面,可以使用工廠模式進行建立。 簡單工廠模式 簡單工廠模式分為三種:普通工廠模式、多個方法工廠模式、靜態方法工廠模式 以傳送QQ訊息或者微信訊息為例來說明: 普通工廠模式 /** *

JAVA設計模式(01)建立型-工廠模式簡單工廠模式】(Simple Factory

     工廠模式是最常用的一類建立型設計模式,通常我們所說的工廠模式是指工廠方法模式,它也是使用頻率最高的工廠模式。本章將要學習的簡單工廠模式是工廠方法模式的“小弟”,它不屬於GoF 23種設計模式,但在軟體開發中應用也較為頻繁,通常將它作為學習其他工廠模式的入門。此

C#設計模式簡單工廠模式(Simple Factory Pattern)

簡單工廠模式解釋:         簡單工廠模式(Simple Factory Pattern)屬於類的創新型模式,又叫靜態工廠方法模式(Static FactoryMethod Pattern),是通過專門定義一個類來負責建立其他類的例項,被建立的例項通常都具有共同

設計模式筆記1簡單工廠模式

1.3 簡單 修改 作用 面向對象 對象 面向 tro 計算   如果想成為一名更優秀的軟件設計師,了解優秀軟件設計的演變過程比學習優秀設計本身更有價值。 1.1 面向對象的好處   通過封裝、繼承多態把程序的耦合度降低,使用設計模式使得程序更加靈活,容易修改,易於復用

初識設計模式1簡單工廠模式

簡單工廠 height 判斷 目前 mes strong 產品 return logs 簡單工廠模式 簡單工廠模式是類的創建模式,又叫做靜態工廠方法模式。簡單工廠模式由一個工廠對象決定生產出哪一種產品類的實例。 為什麽要使用簡單工廠模式 原因很簡單:解耦。 LOL場

C#設計模式之創建類模式抽象工廠模式

nfa display color 職責 product 依賴對象 pset 並不是 config 定義:提供一個創建一系列相關或相互依賴對象的接口,而無須指定他們具體的類。 概念 要理解抽象工廠模式,首先要了解幾個概念,一個是產品等級結構,另一個是產品族。 在工廠方法模

C++設計模式01——簡單工廠模式

actor 異常 main turn mes .com factory format 創建過程 http://blog.csdn.net/caoshangpa/article/details/52763923 問題描述 之前在公司做了一個windows 8平臺的閱讀器。

C#設計模式(1)————簡單工廠模式

actor nbsp str public ole 面向對象 class a ase ons 空出時間總結一下,不然之後又忘了 一、介紹 工廠顧名思義就是生產產品的地方,但是此工廠非彼工廠,我們這裏的工廠說的是生產對象的一個類。我們平常的編程中使用new來創建對象,此時類依

設計模式筆記簡單工廠模式 -- 創建型

-- 一個 筆記 簡單 靜態 com 工廠模式 不同 static 簡單工廠模式 定義一個工廠類,可以根據輸入的不同返回不同類的實例。被創建的類通常有共同的父類。因為通常創建實例的方法都是static,所以又被稱為靜態工廠模式 代碼樣例 設計模式筆記:簡單

Java設計模式(一)之建立型模式工廠模式簡單工廠模式+工廠方法模式

在面向物件程式設計中, 最通常的方法是一個new操作符產生一個物件例項,new操作符就是用來構造物件例項的。但是在一些情況下, new操作符直接生成物件會帶來一些問題。舉例來說,許多型別物件的建立需要一系列的步驟:你可能需要計算或取得物件的初始位置;選擇生成哪個子物件例項;或在你生成你需要的物件

設計模式簡單工廠模式( Simple Factory Pattern )

1. 簡單工廠模式( Simple Factory Pattern ) 目錄 簡單工廠模式( Simple Factory Pattern ) 模式動機 模式定義 模式結構 時序圖 程式碼分析 模式分析 例項

C#基礎之 二十 設計模式簡單工廠模式及介面

前言       這幾天看了這些視訊進行了一些總結,我是打算先看完C#視訊然後繼續看設計模式這本書的,但是視訊中提到了一部分設計模式中的內容,那麼我也多少的總結一下吧,有助於後邊對設計模式的學習! 交流與互動

C#設計模式00-簡單工廠模式

        簡單工廠模式並不屬於GoF的23中設計模式,但是它是學習其他工廠模式的基礎和前提條件。理解了簡單工廠模式,學習工廠方法模式和抽象工廠模式會比較容易一些。     簡單工廠模式的

Java 設計模式(一)簡單工廠模式

參考連結:簡單工廠模式-Simple Factory Pattern 1. 模式概述 定義:定義一個工廠類,它可以根據引數的不同返回不同類的例項,被建立的例項通常都具有共同的父類。因為在簡單工廠模式中用於建立例項的方法是靜態方法,因此簡單工廠模式又被稱為靜態工廠方法模式。 簡

設計模式簡單工廠模式Simple Factory

思想 簡單工廠模式,因為用於建立例項的方法是靜態的,又稱為靜態工廠方法模式。在該模式中,可以根據引數的不同返回不同類的例項。簡單工廠模式專門定義一個類來負責建立其他類的例項,被建立的例項通常都具有相同的父類。 結構 組成(角色) 作用