創建型模式----抽象工廠模式(C++)

創建型模式----抽象工廠模式

抽象工廠模式用於產品族的構建,是所有形態的工廠模式中最爲抽象和最具一般性的模式

抽象工廠模式是一種爲訪問類提供一個創建一組或相互依賴對象的接口,且訪問類無須指定所要產品的具體類就能得到

抽象工廠模式是工廠方法模式的升級版本,工廠方法模式只生產一個等級的產品,而抽象工廠模式可以生產多個等級的產品

實現原理

抽象工廠模式是針對產品族的,而不是像工廠方法模式針對一個產品等級
在這裏插入圖片描述

角色組成

和工廠方法模式相同,抽象工廠模式同樣擁有四種角色

  • 抽象工廠:提供了創建產品的接口
  • 具體工廠:主要實現了抽象工廠的抽象方法,用於創建具體產品
  • 抽象產品:定義了產品的規範,描述的產品(多個)的具體特性
  • 具體產品:實現了抽象產品的接口,由具體工廠創建
抽象工廠模式UML類圖

在這裏插入圖片描述

抽象工廠實例

#include <iostream>
using namespace std;

//抽象矩形
class Rect {
public:
	virtual void showName() = 0;
};

//矩形A
class RectA : public Rect {
public:
	virtual void showName()
	{
		cout << "我是矩形A!" << endl;
	}
};

//矩形B
class RectB : public Rect {
public:
	virtual void showName()
	{
		cout << "我是矩形B!" << endl;
	}
};

//抽象圓形
class Circle {
public:
	virtual void showName() = 0;
};

//圓形A
class CircleA : public Circle {
public:
	virtual void showName()
	{
		cout << "我是圓形A!" << endl;
	}
};

//圓形B
class CircleB : public Circle {
public:
	virtual void showName()
	{
		cout << "我是圓形B!" << endl;
	}
};

//抽象工廠
class AbstractFactory
{
public:
	virtual Rect* CreatRectFactory() = 0;
	virtual Circle* CreatCircleFactory() = 0;
};

//具體工廠A
class FactoryA : public AbstractFactory
{
public:
	virtual RectA* CreatRectFactory(){	
		return new RectA;
	}
	virtual CircleA* CreatCircleFactory() {
		return new CircleA;
	}

};

//具體工廠B
class FactoryB : public AbstractFactory
{
public:
	virtual RectB* CreatRectFactory() {
		return new RectB;
	}
	virtual CircleB* CreatCircleFactory() {
		return new CircleB;
	}

};

int main()
{
	FactoryA* Fa = new FactoryA;
	RectA* Ra = new RectA;
	CircleA* Ca = new CircleA;

	Ra = Fa->CreatRectFactory();
	Ca = Fa->CreatCircleFactory();
	Ra->showName();
	Ca->showName();

	delete Fa;
	delete Ra;
	delete Ca;

	cout << endl;

	FactoryB* Fb = new FactoryB;
	RectB* Rb = new RectB;
	CircleB* Cb = new CircleB;

	Rb = Fb->CreatRectFactory();
	Cb = Fb->CreatCircleFactory();
	Rb->showName();
	Cb->showName();

	delete Fb;
	delete Rb;
	delete Cb;

	system("pause");
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章