目录
什么是抽象工厂方法?
answer:抽象工厂模式是围绕一个超级工厂来创建其他工厂,该超级工厂又称为其他工厂的工厂。这种类型的创建模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是一个负责创建相关对象的工厂,不需要显示指定它们的类,每个生成的工厂都能够按照工厂模式来提供对象。
代码实现?
参见:https://blog.csdn.net/Aaron2521060899/article/details/89449296
// 键盘
class KeyBoard
{
public:
virtual void show() = 0;
};
// 微软的键盘
class KeyBoardMicro : public KeyBoard
{
public:
void show()
{
std::cout << "微软的键盘" << std::endl;
}
};
// 联想的键盘
class KeyBoardLenovo : public KeyBoard
{
public:
void show()
{
std::cout << "联想的键盘" << std::endl;
}
};
// 鼠标
class Mouse
{
public:
virtual void show() = 0;
};
//微软的鼠标
class MouseMicro : public Mouse
{
public:
void show()
{
std::cout << "微软的鼠标" << std::endl;
}
};
//联想的鼠标
class MouseLenovo : public Mouse
{
public:
void show()
{
std::cout << "联想的鼠标" << std::endl;
}
};
// 工厂
class Factory
{
public:
virtual KeyBoard * createKeyBoard() = 0;
virtual Mouse * createMouse() = 0;
};
// 微软的工厂
class FactoryMicro : public Factory
{
public:
KeyBoard * createKeyBoard()
{
return new KeyBoardMicro();
}
Mouse * createMouse()
{
return new MouseMicro();
}
};
// 联想的工厂
class FactoryLenovo : public Factory
{
public:
KeyBoard * createKeyBoard()
{
return new KeyBoardLenovo();
}
Mouse * createMouse()
{
return new MouseLenovo();
}
};
测试用例
#include <iostream>
#include "AbstractFactoryModel.h"
using namespace std;
int main()
{
// 抽象工厂模式
Factory * p = new FactoryMicro();
KeyBoard * pKeyBoard = p->createKeyBoard();
Mouse * pMouse = p->createMouse();
pKeyBoard->show();
pMouse->show();
delete pMouse;
delete pKeyBoard;
delete p;
p = new FactoryLenovo();
pKeyBoard = p->createKeyBoard();
pMouse = p->createMouse();
pKeyBoard->show();
pMouse->show();
delete pMouse;
delete pKeyBoard;
delete p;
system("pause");
return 0;
}
抽象工厂方法的特点?
一个具体的工厂创建一个产品族,一个产品族是不同系列产品的组合,产品的创建逻辑分在每个具体的工厂类种。所有的具体工厂继承于一个抽象工厂。
客户端创建不同产品族的工厂,产品族工厂创建具体的产品对客户端来说是不可见的。
增加新的产品族时,需要增加具体的工厂类,符合OCP原则。
增加新的产品时,需要修改具体的工厂类和增加产品类,不符合OCP原则。
如果没有使用多系列产品的需求,则没有使用抽象工厂模式的必要。