zoukankan      html  css  js  c++  java
  • c++设计模式之抽象工厂模式

    抽象工厂思想理解:
    可能有若干个你想生产的产品类,建立个工厂负责分别生产各类产品,由外部客户来选取想要那种产品类,此程序中没有delete,如想delete可在工厂类中的析构函数中实现
    (若有错请纠正)
    #include <iostream>
    #include <string>
    #include <vector>


    //abstract object interface
    class IUser
    {
    public:
    virtual void GetUser()=0;
    virtual void InsertUser()=0;
    };

    //Department
    class IDepartment
    {
    public:
    virtual void GetDepatment()=0;
    virtual void InsertDepartment()=0;
    };

    //ACCESS User
    class CAccessUser:public IUser
    {
    public:
    virtual void GetUser()
    {
    std::cout<<"Access GetUser"<<std::endl;
    }
    virtual void InsertUser()
    {
    std::cout << "Access InsertUser" << std::endl;
    }

    };

    //ACCESS department
    class CAccessDepartment:public IDepartment
    {
    public:
    virtual void GetDepatment()
    {
    std::cout<<"Access GEtDepartment"<<std::endl;

    }
    virtual void InsertDepartment()
    {
    std::cout << "Access InsertDepartment" << std::endl;
    }

    };

    //SQL Access
    class CSqlUSer:public IUser
    {
    public:
    virtual void GetUser()
    {
    std::cout<<"Sql USer"<<std::endl;
    }
    virtual void InsertUser()
    {
    std::cout<<"Sql User"<<std::endl;
    }

    };

    //SQL department
    class CSqlDepartment:public IDepartment
    {
    public:
    virtual void GetDepatment()
    {
    std::cout<<"sql Getdepartment"<<std::endl;
    }
    virtual void InsertDepartment()
    {
    std::cout<<"sql Insertdepartment"<<std::endl;
    }
    };

    //abstract factory
    class IFactory
    {
    public:
    virtual IUser* CreateUser()=0;
    virtual IDepartment* CreateDepartment()=0;



    };


    //ACCESS factory
    class AccessFactory:public IFactory
    {
    public:
    virtual IUser* CreateUser()
    {
    return new CAccessUser();
    }
    virtual IDepartment* CreateDepartment()
    {
    return new CAccessDepartment();
    }

    };

    //SQL factory
    class SqlFactory:public IFactory
    {
    public:
    virtual IUser* CreateUser()
    {
    return new CSqlUSer();
    }
    virtual IDepartment* CreateDepartment()
    {
    return new CSqlDepartment();
    }
    };


    int main()
    {
    IFactory* factry=new SqlFactory();
    IUser* user=factry->CreateUser();
    IDepartment* depart=factry->CreateDepartment();
    user->GetUser();
    depart->GetDepatment();
    return 0;
    }







  • 相关阅读:
    SQL序列键
    SQL日期跟时间值序列
    springboot日志配置
    weblogic10补丁升级与卸载
    idea使用svn报错
    mybatis插入数据并返回主键(oracle)
    UTF-8格式txt文件读取字节前三位问题
    https连接器
    git将本地项目上传码云
    aop的使用
  • 原文地址:https://www.cnblogs.com/xuaidongstdudyrecording/p/6014104.html
Copyright © 2011-2022 走看看