設計模式----簡單工廠模式(C++)

設計模式----簡單工廠模式

簡單工廠模式屬於創建型模式,又叫靜態工廠方法模式,但不屬於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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章