设计模式---抽象工厂模式

来源:互联网 发布:数控编程指令g代码 编辑:程序博客网 时间:2024/06/05 05:58

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

#include<iostream>

using namespace std;

class User
{
    private:
        int id;
        string name;
    public:
        int GetId()
        {
            return id;
        }
        void SetId(int _id)
        {
            this->id = _id;
        }
        string GetName()
        {
            return name;
        }
        void SetName(string name)
        {
            this->name = name;
        }

};
class Department
{
    private:
        int id;
        string name;
    public:
        int GetId()
        {
            return id;
        }
        void SetId(int _id)
        {
            this->id = _id;
        }
        string GetName()
        {
            return name;
        }
        void SetName(string name)
        {
            this->name = name;
        }

};

class IUser
{
    public:

    virtual void Insert(User *user){}
    virtual User *GetUser(int id){}
};

class SqlserverUser:public IUser
{
    public:
        void Insert(User *user)
        {
            cout<<"sql server sheet user insert"<<endl;
        }
        User *GetUser(int id)
        {
            cout<<"sql server sheet user insert"<<endl;
            return NULL;
        }

};
class AccessUser:public IUser
{
    public:
        void Insert(User *user)
        {
            cout<<"access sheet user insert"<<endl;
        }
        User *GetUser(int id)
        {
            cout<<"access sheet user insert"<<endl;
            return NULL;
        }

};

class IDepartment
{
    public:
    virtual void Insert(Department *department) {}
    virtual Department *GetDepartment(int id){}

};
class SqlserverDepartment:public IDepartment
{
    public:
        void Insert(Department *user)
        {
            cout<<"sql server sheet Department insert"<<endl;
        }
        Department *GetDepartment(int id)
        {
            cout<<"sql server sheet Department insert"<<endl;
            return NULL;
        }

};
class AccessDepartment:public IDepartment
{
    public:
        void Insert(Department *user)
        {
            cout<<"access sheet Department insert"<<endl;
        }
        Department *GetDepartment(int id)
        {
            cout<<"access sheet Department insert"<<endl;
            return NULL;
        }

};

class IFactory
{
    public:
    virtual IUser *CreateUser(){}
    virtual IDepartment *CreateDepartment(){}
};

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 *fact= new AccessFactory();

    IUser *iu = fact->CreateUser();
    iu->Insert(user);
    iu->GetUser(1);

    IDepartment *id = fact->CreateDepartment();
    id->Insert(dept);
    id->GetDepartment(1);
    
    return 0;
}


原创粉丝点击