#include<iostream>
#include<string>
#include<vector>
using namespace std;
class User {};
class Department {};
class IUser
{
public:
virtual void Insert(User* user) = 0;
virtual User* GetUser(int id) = 0;
};
class SqlserverUser :public IUser
{
public:
void Insert(User* user)
{
cout << "在SQL Server中给User表增加一条记录" << endl;
}
User* GetUser(int id)
{
cout << "在SQL Server中根据ID得到User表一条记录" << endl;
return nullptr;
}
};
class AccessUser :public IUser
{
public:
void Insert(User* user)
{
cout << "在Access中给User表增加一条记录" << endl;
}
User* GetUser(int id)
{
cout << "在Access中根据ID得到User表一条记录" << endl;
return nullptr;
}
};
class IDepartment
{
public:
virtual void Insert(Department* department) = 0;
virtual Department* GetDeparment(int id) = 0;
};
class SqlserverDepartment :public IDepartment
{
public:
void Insert(Department* department)
{
cout << "在SQL Server中给Department表增加一条记录" << endl;
}
Department* GetDeparment(int id)
{
cout << "在SQL Server中根据ID得到Department表一条记录" << endl;
return nullptr;
}
};
class AccessDepartment :public IDepartment
{
public:
void Insert(Department* department)
{
cout << "在Access中给Department表增加一条记录" << endl;
}
Department* GetDeparment(int id)
{
cout << "在Access中根据ID得到Department表一条记录" << endl;
return nullptr;
}
};
class IFactory
{
public:
virtual IUser* CreateUser() = 0;
virtual IDepartment* CreateDepartment() = 0;
};
class SqlServerFactory :public IFactory
{
public:
IUser* CreateUser()
{
return new SqlserverUser();
}
IDepartment* CreateDepartment()
{
return new SqlserverDepartment();
}
};
class AccessFactory : public IFactory
{
public:
IUser* CreateUser()
{
return new AccessUser();
}
IDepartment* CreateDepartment()
{
return new AccessDepartment();
}
};
int main()
{
User* user = new User();
Department* dept = new Department();
IFactory* factory = new SqlServerFactory();
IUser* iu = factory->CreateUser();
iu->Insert(user);
iu->GetUser(1);
IDepartment* id = factory->CreateDepartment();
id->Insert(dept);
id->GetDeparment(1);
system("pause");
return 0;
}
用简单工厂来改进抽象工厂
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class User {};
class Department {};
class IUser
{
public:
virtual void Insert(User* user) = 0;
virtual User* GetUser(int id) = 0;
};
class SqlserverUser :public IUser
{
public:
void Insert(User* user)
{
cout << "在SQL Server中给User表增加一条记录" << endl;
}
User* GetUser(int id)
{
cout << "在SQL Server中根据ID得到User表一条记录" << endl;
return nullptr;
}
};
class AccessUser :public IUser
{
public:
void Insert(User* user)
{
cout << "在Access中给User表增加一条记录" << endl;
}
User* GetUser(int id)
{
cout << "在Access中根据ID得到User表一条记录" << endl;
return nullptr;
}
};
class IDepartment
{
public:
virtual void Insert(Department* department) = 0;
virtual Department* GetDeparment(int id) = 0;
};
class SqlserverDepartment :public IDepartment
{
public:
void Insert(Department* department)
{
cout << "在SQL Server中给Department表增加一条记录" << endl;
}
Department* GetDeparment(int id)
{
cout << "在SQL Server中根据ID得到Department表一条记录" << endl;
return nullptr;
}
};
class AccessDepartment :public IDepartment
{
public:
void Insert(Department* department)
{
cout << "在Access中给Department表增加一条记录" << endl;
}
Department* GetDeparment(int id)
{
cout << "在Access中根据ID得到Department表一条记录" << endl;
return nullptr;
}
};
class DataAccess
{
private:
static const string db;
public:
static IUser* CreateUser()
{
IUser* result = nullptr;
if (db == "Sqlserver")
{
result = new SqlserverUser();
}
else if (db == "Access")
{
result = new AccessUser();
}
return result;
}
static IDepartment* CreateDepartment()
{
IDepartment* result = nullptr;
if (db == "Sqlserver")
{
result = new SqlserverDepartment();
}
else if (db == "Access")
{
result = new AccessDepartment();
}
return result;
}
};
const string DataAccess::db = "Sqlserver";
int main()
{
User* user = new User();
Department* dept = new Department();
IUser* iu = DataAccess::CreateUser();
iu->Insert(user);
iu->GetUser(1);
IDepartment* id = DataAccess::CreateDepartment();
id->Insert(dept);
id->GetDeparment(1);
system("pause");
return 0;
}
用反射+抽象工厂
.......................