定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠模式使乙個類的例項化延遲到其子類。
c++中的工廠方法(工廠基類中所定義的建立產品的函式)都是虛函式並且常常是純虛函式。
product:(工廠基類)定義工廠方法所建立的介面;
concreteproduct:(工廠具體類)實現product介面;
creator:宣告工廠方法,返回乙個product物件;
concretecreator:重新定義工廠方法返回乙個concreteproduct例項。
creator宣告工廠方法create,返回乙個product物件
class creator;
product* creator::create(productid id)
子類mycreator可以重新定義工廠方法返回乙個concreteproduct例項。
product* myproduct::create(productid id)
有時,為了建立適當的product物件,我們不得不建立乙個creator的子類。【可以使用模板子類進行解決】
1、工廠基類
maze、room、wall、door均為產品基類
class mazegame()
virtual room* makeroom(int n) const //工廠方法1
virtual wall* makewall() const //工廠方法2
virtual door* makedoor(room* r1,room* r2) const
};
2、具體工廠類:
class bombedmazegame: public mazegame
virtual room* makeroom() const //重新定義的工廠方法2
}
注意體會與抽象工廠方法的不同,這裡每一種產品的實現其實就是工廠模式。上例中具體工廠通過繼承工廠基類,重新定義工廠方法,最終實現工廠模式。
比較有困惑的是createmaze函式的實現,其實這裡主要是為了完整性考慮,createmaze函式不屬於工廠方法中的參與者。
建立迷宮函式
maze mazegame::createmaze()
設計模式學習筆記 工廠模式
簡單工廠 將建立類的 剝離出來,放到乙個類裡面,通過例項化這個類去獲取想要的物件。先將多個類的物件儲存到map裡,然後通過get方法從裡面獲取 工廠方法 基於介面去實現多個不同的方法,類繼承自介面,然後重寫方法 類裡面再建立乙個靜態類,靜態類裡從父類獲取對應的方法的邏輯,父類裡時多種不同的實現。抽象...
設計模式學習筆記 工廠
簡單工廠 工廠方法 抽象工廠。所謂的工廠,就是生產東西的。在設計模式這裡,工廠就是返回物件的。所以工廠方法 抽象工廠都是建立型的設計模式 簡單工廠不算在23種設計模式裡面 簡單工廠 工廠方法 抽象工廠,乙個比乙個複雜,但又互有關聯,比如工廠方法可以退化成簡單工廠,工廠方法可看成特殊的抽象工廠。1 簡...
設計模式筆記 工廠模式
工廠模式主要是為建立物件提供過度介面,以便將建立物件的具體過程隔離,從而達到提高靈活性的目的 分類一 簡單工廠模式,工廠方法模式,抽象工廠模式 逐步抽象 分類二 工廠方法模式 包括簡單工廠模式 抽象工廠模式 1.簡單工廠模式又稱靜態工廠方法模式,存在目的 定義乙個用於建立物件的介面。組成 工廠類角色...