目录
前言
学习完工厂方法模式,发现工厂方法模式存在一个严重的问题:
- 一个具体工厂只能创建一类产品
而在实际过程中,一个工厂往往可能需要生产不同类型的产品。为了解决上述的问题,可以使用抽象工厂模式来解决。
定义
- 为创建一组相关或者相互依赖的对象提供一个接口,而且无须指定它们的具体类。
- 简单的说,抽象工厂模式是工厂方法模式的升级版本,当存在多个产品族时,产品族之间是存在相关或者依赖关系,可以使用抽象工厂来创建产品。
- 产品族(也称为产品线),用一个生产电脑的例子来举例,假如一个工厂是生产联想和惠普的电脑,但是电脑也有多个产品线:台式机、笔记本和平板等等。联想和惠普都在生产这些不同产品线上的电脑。
- 抽象产品(AbstractProduct):一个抽象类或接口,负责定义具体产品必须实现的方法;
- 具体产品(ConcreteProduct):定义具体工厂生产的具体产品,并实现 AbstractProduct中定义的接口。
- 抽象工厂(AbstractFactory):一个接口或抽象类,它声明了用来创建不同产品的方法。
- 具体工厂(ConcreteFactory):具体工厂重写AbstractFactory中的抽象方法,使该方法返回 ConcreteProduct 的实例。
用 C++ 代码实现 大话设计模式本章代码:
#include<iostream>
using namespace std;
class Department // 抽象产品Department ,定义具体产品的公共接口
{
public:
virtual ~Department() = default;
virtual void Insert() = 0;
virtual Department *GetDepartment() = 0;
};
// 创建具体产品类SqlserDepartment, 定义生产的具体产品;
class SqlserDepartment :public Department
{
public:
void Insert()override
{
cout << "在SQL Server 中给 Department 表增加一条记录!" << endl;
}
Department *GetDepartment()override
{
cout <&