设计模式之抽象工厂模式(Abstract Factory)

本文介绍了抽象工厂模式,包括其应用场景、案例分析和模式定义。通过数据库连接与命令创建的案例,阐述了产品族和产品等级的概念,并强调了模式在应对新产品族需求变化时的优势,但可能不适用于新产品等级的扩展。
摘要由CSDN通过智能技术生成

前言

在学习侯捷老师的有关设计模式的课程(李建忠老师主讲)中,老师对23种设计模式的有自己的划分,如下。所以老师讲解是按照这种顺序讲解。
在这里插入图片描述
对象创建:
在这里插入图片描述

Abstract Factory设计模式

1.模式的应对场景

和工厂模式不同,它解决的是单一的对象创建工作。抽象工厂模式解决的是“一系列相互依赖的对象”的创建工作。

设计模式之工厂模式(Factor Method)

2.案例1:数据库的connection、command依赖

先给代码再说明:

#include <iostream>
#include <string>
using namespace std;


//database connection
class IDBConnection
{
   
public:
	virtual void ConnectionString() = 0;
};

class SqlConnection : public IDBConnection
{
   
public:
	void ConnectionString(){
    cout << "Sql connection" << endl; }
};
class MysqlConnection : public IDBConnection
{
   
public:
	void ConnectionString(){
    cout << "Mysql connection" << endl; }
};


//database command
class IDBCommand
{
   
public:
	virtual void CommandText() = 0;
	virtual void SetConnection(IDBConnection* connect) = 0;
};

class SqlCommand : public IDBCommand
{
   
public:
	void CommandText(){
    cout << "Sql command text" << endl; }
	void SetConnection(IDBConnection* connect){
    cout << "set connection with "; connect->ConnectionString(); }
};
class MysqlCommand : public IDBCommand
{
   
public:
	void CommandText(){
    cout << "Mysql command text" << endl; }
	void SetConnection(IDBConnection* connect){
    cout << "set connection with "; connect->ConnectionString(); }
};


/***********工厂介入 start*****************************/

//抽象工厂
class IDBFactor
{
   
public:
	virtual IDBConnection* creatDBConnection() = 0;
	virtual IDBCommand* creatDBCommand() = 0;
};
//sql 工厂
class SqlFactor : public IDBFactor
{
   
public:
	virtual IDBConnection* creatDBConnection()
	{
   
		return new SqlConnection;
	}
	virtual IDBCommand* creatDBCommand()
	{
   
		return new SqlCommand;
	}
};
//Mysql 工厂
class MysqlFactor : public IDBFactor
{
   
public:
	virtual IDBConnection* creatDBConnection()
	{
   
		return new MysqlConnection;
	}
	virtual IDBCommand* creatDBCommand()
	{
   
		return new MysqlCommand;
	}
};

/***********工厂介入 end*****************************/


class EmployeeDAO
{
   
	IDBFactor* dbfactor;
public:
	EmployeeDAO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值