#include "stdafx.h" #include <iostream> #include <string> #include <stdlib.h> #include <boost/shared_ptr.hpp> using namespace std; /** * @brief 数据库有SQL数据库与甲骨文数据库 * 现实当中有时候需要变换不同的数据库访问、以下采用Factory Method模式做这个变换效果 * @warning 一个Factory Method模式不会单独只为创建对象而存在,代码中DatabaseFactory类一般都其他的功能类 * 只是存在一个工厂方法,将对象的创建延迟到子类 */ /** @brief 数据库基类 */ class Database { public: virtual void WriteDatabase(const string& strName) = 0; }; class SQL_Database : public Database { public: virtual void WriteDatabase(const string& strName) { cout << "SQL数据库 " << strName << endl; }; }; class Ora_Database : public Database { public: virtual void WriteDatabase(const string& strName) { cout << "Oracle数据库 " << strName << endl; }; }; /** @brief 工厂方法基类 */ class DatabaseFactory { public: virtual Database* CreateDatabase() = 0; }; class SQL_Factory : public DatabaseFactory { public: virtual Database* CreateDatabase() { return new SQL_Database(); }; }; class Ora_Factory : public DatabaseFactory { public: virtual Database* CreateDatabase() { return new Ora_Database(); }; }; int _tmain(int argc, _TCHAR* argv[]) { boost::shared_ptr<DatabaseFactory> pbFactory(new Ora_Factory()); boost::shared_ptr<Database> pSQLDatabase(pbFactory->CreateDatabase()); pSQLDatabase->WriteDatabase(_T("Daa05")); system("pause"); return 0; }