抽象工厂模式------设计模式实验报告(C++实现)

本文详细介绍了如何使用抽象工厂模式在Java中实现MySQL和Oracle数据库的连接,包括Connection和Statement接口的定义,以及MySQLFactory和OracleFactory的具体实现。通过测试函数展示了如何在运行时动态切换数据库。同时,文章还分析了抽象工厂模式在设计模式中的应用和优缺点。
摘要由CSDN通过智能技术生成

一、实验内容

利用抽象工厂模式实现不同数据库连接。要求按照P102页6.3.2实例说明,实现类图代码,并且编写测试客户端,给出动态更换数据库的运行结果。

二.设计类图

在这里插入图片描述

三、类具体代码(要求有相关注释)

    //Connection接口:
class Connection
{
public:
	//连接函数,不同的数据库有不同的连接方式,定义为虚函数,完成多态
	virtual void connect() = 0
	{
		cout << "connect sucessful!" << endl;
	}
};

	 MySQLConnection类:
	//mysql连接类
class MySQLConnection :public Connection
{
public:
	void connect()
	{
		cout << "Mysql连接成功。" << endl;
	}
};

//OracleConnection类
//Oracle连接类
class OracleConnection :public Connection
{
public:
	void connect()
	{
		cout << "Oracle连接成功。" << endl;
	}
};


//DBFactory接口
//数据库工厂接口
class DBFactory
{
public:
	virtual Connection* createConnection() = 0
	{
		cout << "create Connection" << endl;
	}
	virtual Statement* createStatement() = 0
	{
		cout << "create stament" << endl;
	}
};

//MySQLFactory类
//MySQL数据库工厂,实例化MySQL数据库连接对象,MySQL语句对象
class MySQLFactory:public DBFactory
{
public:
	Connection* createConnection()
	{
		return new MySQLConnection();
	}
	Statement* createStatement()
	{
		return new MySQLStatement();
	}
};

//OracleFactory类
//Oracle数据库工厂,实例化Oracle数据库连接对象,Oracle语句对象
class OracleFactory:public DBFactory
{
public:
	Connection* createConnection()
	{
		return new OracleConnection();
	}
	Statement* createStatement()
	{
		return new OracleStatement();
	}
};
//Statement接口
//语句接口
class Statement
{
public:
	virtual void statement() = 0//执行语句
	{
		cout << "statement sucefull!" << endl;
	}
};
OracleStatement类
//Oralce语句类
class OracleStatement:public Statement
{
public:
	void statement()
	{
		cout << "Oracle语句执行" << endl;
	}
};
//MySQLStatement类
//mysql语句类
class MySQLStatement:public Statement
{
public:
		void statement()
{
		cout << "mysql语句执行" << endl;
}
};
	  //测试函数:
int main()
{
	DBFactory* factory;
	Connection* connection;
	Statement* statement;
	factory = new OracleFactory();//建立一个Oracle数据库连接工厂
	connection = factory->createConnection();//建立Oracle数据库连接,将其赋值给一个连接对象
	statement = factory->createStatement();//建立一个Oracle语句执行,将其赋给一个语句对象
	connection->connect();//数据库连接
	statement->statement();//数据库语句执行
}

四.运行结果截图

         ![在这里插入图片描述](https://img-blog.csdnimg.cn/eb8f7f737bbe4120b3cd112c6b02534d.png)

五.设计模式分析总结

(1) 抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。
(2) 抽象工厂模式包含四个角色:抽象工厂用于声明生成抽象产品的法;具体工厂实现了抽象工厂声明的生成抽象产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中;抽象产品为每种产品声明接口,在抽象产品中定义了产品的抽象业务方法;具体产品定义具体工厂生产的具体产品对象,实现抽象产品接口中定义的业务方法。
(3) 抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构。
(4)抽象工厂模式的主要优点是隔离了具体类的生成,使得客户并不需要知道什么被创建,而且每次可以通过具体工厂类创建一个产品族中的多个对象,增加或者替换产品族比较方便,增加新的具体工厂和产品族很方便;主要缺点在于增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。
(5 )抽象工厂模式适用情况包括:一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节;系统中有多于一个的产品族,而每次只使用其中某一产品族;属于同一个产品族的产品将在一起使用;系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值