目录
前言
在学习侯捷老师的有关设计模式的课程(李建忠老师主讲)中,老师对23种设计模式的有自己的划分,如下。所以老师讲解是按照这种顺序讲解。
对象创建:
Abstract Factory设计模式
1.模式的应对场景
和工厂模式不同,它解决的是单一的对象创建工作。抽象工厂模式解决的是“一系列相互依赖
的对象”的创建工作。
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