抽象工厂模式是一种创建型模式,是23种GOF设计模式之一。抽象工厂模式,是提供一个创建一系列相关或者相互依赖的借口,而无需指定它们具体的类。
下面是一个例子:
#include <iostream>
using namespace std;
// 抽象 家具
// 桌子
class AbstractTable
{
public:virtual void ShowName() = 0;
};
// 椅子
class AbstractChair
{
public:virtual void ShowName() = 0;
};
// A 工厂 桌子
class ATable :public AbstractTable
{
public:virtual void ShowName() { cout << "A 工厂 桌子" << endl; };
};
// B 工厂 桌子
class BTable :public AbstractTable
{
public:virtual void ShowName() { cout << "B 工厂 桌子" << endl; };
};
//A工厂 椅子
class AChair :public AbstractChair
{
public:virtual void ShowName() { cout << "A 工厂 椅子" << endl; };
};
//B 工厂 椅子
class BChair :public AbstractChair
{
public:virtual void ShowName() { cout << "B 工厂 椅子" << endl; };
};
//抽象工厂 针对产品族
class AbstractFactory
{
public:
virtual AbstractTable * CreateTable() = 0;
virtual AbstractChair * CreateChair() = 0;
};
//A工厂
class AFactory :public AbstractFactory
{
public:
virtual AbstractTable * CreateTable() { return new ATable; };
virtual AbstractChair * CreateChair() { return new AChair; };
};
//B 工厂
class BFactory :public AbstractFactory
{
public:
virtual AbstractTable * CreateTable() { return new BTable; };
virtual AbstractChair * CreateChair() { return new BChair; };
};
void main()
{
AbstractFactory * factory = NULL;
AbstractTable * table = NULL;
AbstractChair * chair = NULL;
// A 工厂
factory = new AFactory;
table = factory->CreateTable();//桌子
chair = factory->CreateChair();//椅子
table->ShowName();
chair->ShowName();
delete factory;
delete table;
delete chair;
cout << "-------------------------------\n";
// B 工厂
factory = new BFactory;
table = factory->CreateTable();//桌子
chair = factory->CreateChair();//椅子
table->ShowName();
chair->ShowName();
delete factory;
delete table;
delete chair;
}
运行结果:
抽象工厂模式的适用场景:
1、 系统不依赖于产品类实例如何被创建。
2、 系统中的产品有多于一个产品族的,但只使用其中某一个的产品。
抽象工厂针对的是产品族,而不是产品结构。
产品族:同一个工厂,功能(产品)不同。
产品等级结构:相同功能(产品),不同工厂
感谢您的浏览。