設計模式----簡單工廠模式
簡單工廠模式屬於創建型模式,又叫靜態工廠方法模式,但不屬於23種GOF模式之一
簡單工廠模式是由一個工廠對象決定創建出哪一種產品類的實例,它是工廠模式種最簡單實用的模式
實現方式
簡單工廠模式的實質是由一個工廠類根據傳入的參數,動態決定應該創建哪種產品類的實例
簡單工廠模式所包含的角色和職責如下:
- 工廠角色:簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯;工廠類的創建產品類的方法可以被外界直接調用,創建所需的產品對象
- 抽象產品角色:簡單工廠模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口
- 具體產品角色:簡單工廠模式的創建目標,所有創建的對象都是充當這個角色的某個具體類的實例
簡單工廠模式的UML類圖
特性
優點
工廠類是整個模式的關鍵,包含了必要的邏輯判斷,根據外界給定的信息,決定究竟應該創建哪個具體類的對象.通過使用工廠類,外界無需瞭解對象的創建過程,更有利於軟件體系結構的優化
缺點
由於工廠類幾種所有實例的創建邏輯,違反了單一職責原則
如果新增對象的種類,則需要更改工廠類的源代碼,違法了"開閉原則"
簡單工廠模式實例
#include <iostream>
using namespace std;
//抽象形狀
class Shape{
public:
virtual void showName() = 0;
};
//矩形
class Rect : public Shape{
public:
virtual void showName()
{
cout << "我是矩形!" << endl;
}
};
//圓形
class Circle : public Shape {
public:
virtual void showName()
{
cout << "我是圓形!" << endl;
}
};
//形狀工廠
class ShapeFactory
{
public:
static Shape* Create(string type)
{
if (type == "矩形")
return new Rect;
else if (type == "圓形")
return new Circle;
else
return NULL;
}
};
int main()
{
ShapeFactory* factory = new ShapeFactory;
Shape* rect = factory->Create("矩形");
rect->showName();
Shape *cricle = factory->Create("圓形");
cricle->showName();
system("pause");
return 0;
}