模式定义:
提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。
使用动机:
在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在更多系列对象的创建工作。
// 数据访问有关的基类
class IDBConnection
{
};
class IDBCommand
{
};
class IDBDataReader
{
};
// 抽象工厂方法
class IDBFactory
{
public:
virtual IDBConnection *CreateDBConnection() = 0;
virtual IDBCommand *CreateDBCommand() = 0;
virtual IDBDataReader * CreateDBDataReader() = 0;
virtual ~IDBFactory() { }
};
// 支持 mysql
class SqlConnection : public IDBConnection
{
};
class SqlCommand : public IDBCommand
{
};
class SqlDataReader : public IDBDataReader
{
};
class SqlFactory : public IDBFactory
{
public:
virtual IDBConnection *CreateDBConnection()
{
return new SqlConnection();
}
virtual IDBCommand * CreateDBCommand()
{
return new SqlCommand();
}
virtual IDBDataReader * CreateDBDataReader()
{
return new SqlDataReader();
}
};
class EmplyeeDao
{
private:
IDBFactory *m_pIDBFactory = NULL;
public:
EmplyeeDao(IDBFactory *pFactory)
: m_pIDBFactory(pFactory) { }
vector<EmplyeeDo> GetEmplyees()
{
IDBConnection *pConnection = m_pIDBFactory->CreateDBConnection();
pConnection->ConnectionsString("...");
IDBCommand *pCommand = m_pIDBFactory->CreateDBCommand();
pCommand->CommandText(pSqlConnection, "...");
IDBDataReader *pDataReader = m_pIDBFactory->CreateDBDataReader();
while (pDataReader->Read())
{
}
}
};