#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;
}

用反射+抽象工厂
.......................

12-14 08:22
查看更多