#include <iostream>
#include <string>
#include <map>
using namespace std;
template <typename Base>
class abstract_factory
{
public:
virtual ~abstract_factory(){}
virtual Base *create() =0;
};
template <typename Sub, typename Base>
class factory : public abstract_factory<Base>
{
public:
Base *create()
{
return new Sub();
}
};
class data_base
{
public:
virtual ~data_base(){}
virtual string search(string str) =0;
};
class sqlite : public data_base
{
public:
static const string name;// = "sqlite";
string search(string str)
{
cout<<name<<" : "<<str<<endl;
}
};
const string sqlite::name = "sqlite";
class mysql : public data_base
{
public:
static const string name;
string search(string str)
{
cout<<name<<" : "<<str<<endl;
}
};
const string mysql::name = "mysql";
class oracle : public data_base
{
public:
static const string name;// = "oracle";
string search(string str)
{
cout<<name<<" : "<<str<<endl;
}
};
const string oracle::name = "oracle";
int main()
{
map<string, abstract_factory<data_base>* > dbs;
dbs.insert(make_pair(sqlite::name, new factory<sqlite, data_base>));
dbs.insert(make_pair(mysql::name, new factory<mysql, data_base>));
dbs.insert(make_pair(oracle::name, new factory<oracle, data_base>));
string input;
cin>>input;
data_base *pDB = NULL;
while (1)
{
if (input == "q")
{
break;
}
else if (input == sqlite::name)
{
pDB = dbs[sqlite::name]->create();
pDB->search("SQLITE");
delete pDB;
pDB = NULL;
}
else if (input == mysql::name)
{
pDB = dbs[mysql::name]->create();
pDB->search("MYSQL");
delete pDB;
pDB = NULL;
}
else if (input == oracle::name)
{
pDB = dbs[oracle::name]->create();
pDB->search("ORACLE");
delete pDB;
pDB = NULL;
}
else
{
cout << "DB not found!"<<endl;
}
cin>>input;
}
return 0;
}
abstract_factory抽象工厂
最新推荐文章于 2024-04-25 09:25:45 发布