文章目录
前言
今天复习了抽象工厂模式,之前复习了简单工厂模式和工厂方法模式,它们实现的功能都是一样的:为了封装对象的创建过程。如果大家对简单工厂模式和工厂方法模式不熟悉,可以看下之前的文章:
简单工厂模式:https://blog.csdn.net/DU_YULIN/article/details/119778822
工厂方法模式:https://blog.csdn.net/DU_YULIN/article/details/119821207
1. 抽象工厂模式理解
抽象工厂模式,在个人看来就是对工厂方法模式的扩展,形象来说就是:工厂方法模式中工厂是对单一产品的生产,而抽象工厂模式是对多个产品进行生产。
这里以不同数据库(Sqlserver, Access)访问为例,假设数据库中仅有User表,则用工厂方法模式实现类图(引用《大话设计模式》)如下:
现在数据库中新增Department表,则需要用抽象工厂模式实现类图(引用《大话设计模式》)如下所示:
如果查看抽象工厂模式和工厂方法模式中工厂类的实现,你会发现它们仅在类方法个数不同:工厂方法模式中工厂类仅有一个方法,而抽象工厂模式中工厂类有两个方法。
2. C++实现抽象工厂模式
这里对上述数据库访问例子进行实现:
#include <iostream>
#include <memory>
//DataBase Table - User
class User {
private:
std::string id;
std::string name;
public:
User(): id(""), name("") {
}
User(const std::string& strId, const std::string& strName): id(strId), name(strName){
}
std::string GetId() const
{
return id;
}
std::string GetName() const
{
return name;
}
};
//DataBase Table - Department
class Department
{
private:
std::string id;
std::string name;
public:
Department(): id(""), name("") {
}
Department(const std::string& strId, const std::string& strName) : id(strId), name(strName) {
}
std::string GetId() const
{
return id