抽象工厂模式

来源:互联网 发布:模拟宇宙软件 编辑:程序博客网 时间:2024/06/05 17:53
#include <iostream>#include <string>using namespace std;class IUser{public:    virtual void getUser()=0;    virtual void setUser()=0;};class SqlUser:public IUser{public:    void getUser()    {        cout<<"在sql中返回user"<<endl;    }    void setUser()    {        cout<<"在sql中设置user"<<endl;    }};class AccessUser:public IUser{public:    void getUser()    {        cout<<"在Access中返回user"<<endl;    }    void setUser()    {        cout<<"在Access中设置user"<<endl;    }};class IDepartment{public:    virtual void getDepartment()=0;    virtual void setDepartment()=0;};class SqlDepartment:public IDepartment{public:    void getDepartment()    {        cout<<"在sql中返回Department"<<endl;    }    void setDepartment()    {        cout<<"在sql中设置Department"<<endl;    }};class AccessDepartment:public IDepartment{public:    void getDepartment()    {        cout<<"在Access中返回Department"<<endl;    }    void setDepartment()    {        cout<<"在Access中设置Department"<<endl;    }};class IFactory{public:    virtual IUser *createUser()=0;    virtual IDepartment *createDepartment()=0;};class SqlFactory:public IFactory{public:    IUser *createUser()     {        return new SqlUser();    }    IDepartment *createDepartment()     {        return new SqlDepartment();    }};class AccessFactory:public IFactory{public:    IUser *createUser()    {        return new AccessUser();    }    IDepartment *createDepartment()     {        return new AccessDepartment();    }};/*************************************************************/class DataAccess{private:    static string db;    //string db="access";public:    static IUser *createUser()    {        if(db=="access")        {            return new AccessUser();        }        else if(db=="sql")        {            return new SqlUser();        }    }    static IDepartment *createDepartment()    {        if(db=="access")        {            return new AccessDepartment();        }        else if(db=="sql")        {            return new SqlDepartment();        }       }};string DataAccess::db="sql";/*************************************************************/int main(){    //IFactory *factory=new SqlFactory();    IFactory *factory;    IUser *user;    IDepartment *department;    factory=new AccessFactory();    user=factory->createUser();    department=factory->createDepartment();    user->getUser();    user->setUser();    department->getDepartment();    department->setDepartment();    user=DataAccess::createUser();    department=DataAccess::createDepartment();    user->getUser();    user->setUser();    department->getDepartment();    department->setDepartment();    return 0;}

GOOD:定义了一个创建一系列相关或相互依赖的接口,而无需指定它们的具体
类。
用于交换产品系列,如 ACCESS­>SQL SERVER;
产品的具体类名被具体工厂的实现分离

0 0
原创粉丝点击