簡單工廠模式
簡單工廠模式的概念
簡單工廠模式屬于類的創建型模式,又叫做靜態工廠方法模式。通過專門定義一個類來負 責創建其他類的實例,被創建的實例通常都具有共同的父類。
具體分類
- 工廠(Creator)角色 簡單工廠模式的核心,
它負責實現創建所有實例的內部邏輯。工廠類可以被外界直接調 用,創建所需的產品對象。 - 抽象(Product)角色
簡單工廠模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口。 - 具體產品(ConcreteProduct)角色
簡單工廠模式所創建的具體實例對象
簡單工廠模式不是23種設計模式,因為它并不符合開閉原則
簡單工廠模式的優缺點
在這個模式中,工廠類是整個模式的關鍵所在。它包含必要的判斷邏輯,能夠根據外界 給定的信息,決定究竟應該創建哪個具體類的對象。用戶在使用時可以直接根據工廠類去創 建所需的實例,而無需了解這些對象是如何創建以及如何組織的。有利于整個軟件體系結構 的優化。
不難發現,簡單工廠模式的缺點也正體現在其工廠類上,由于工廠類集中了所有實 例的創建邏輯,所以“高內聚”方面做的并不好。另外,當系統中的具體產品類不斷增多時,可能會出現要求工廠類也要做相應的修改,擴展性并不很好。
簡單工廠模式的實現
#include<iostream>
using namespace std;//抽象水果
class AbstractFruit{
public:virtual void ShowName() = 0;};//蘋果
class Apple :public AbstractFruit{virtual void ShowName(){cout << "我是蘋果" << endl;}
};//香蕉
class Banana :public AbstractFruit{
public:virtual void ShowName(){cout << "我是香蕉" << endl;}
};//梨子
class Pear :public AbstractFruit{
public:virtual void ShowName(){cout << "我是梨子" << endl;}
};//建立一個工廠
class FruitFactory{
public:static AbstractFruit *CreateFruit(string flag){if (flag == "apple"){return new Apple;}else if (flag == "pear"){return new Pear;}else if (flag == "banana"){return new Banana;}}
};void test01(){FruitFactory *factory = new FruitFactory;AbstractFruit *fruit = factory->CreateFruit("apple");fruit->ShowName();delete fruit;fruit = factory->CreateFruit("banana");fruit->ShowName();delete fruit;fruit = factory->CreateFruit("pear");fruit->ShowName();delete fruit;
}int main(void)
{test01();system("pause");return 0;
}