设计模式:抽象工厂模式C++实现

本文介绍了抽象工厂模式的理解及其与工厂方法模式的区别,通过数据库访问的例子阐述了抽象工厂模式的实现,并分析了其优缺点。文章还提供了C++代码示例,展示了如何使用抽象工厂模式来切换不同数据库的访问方式。
摘要由CSDN通过智能技术生成


前言

今天复习了抽象工厂模式,之前复习了简单工厂模式和工厂方法模式,它们实现的功能都是一样的:为了封装对象的创建过程。如果大家对简单工厂模式和工厂方法模式不熟悉,可以看下之前的文章:
简单工厂模式: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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值