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

    #ifndef __ABSTRACT_FACTORY_MODEL__
    #define __ABSTRACT_FACTORY_MODEL__
    
    #include <string>
    #include <vector>
    #include <iostream>
    using namespace std;
    /*
    GOOD:定义了一个创建一系列相关或相互依赖的接口,而无需指定它们的具体类。
    用于交换产品系列,如ACCESS->SQL SERVER;
    产品的具体类名被具体工厂的实现分离
    */
    
    //用户抽象接口
    class IUser
    {
    public:
        virtual void getUser() = 0;
        virtual void insertUser() = 0;
    };
    
    //部门抽象接口
    class IDepartment
    {
    public:
        virtual void getDepartment() = 0;
        virtual void insertDepartment() = 0;
    };
    
    //ACCESS用户
    class CAccessUser : public IUser
    {
    public:
        virtual void getUser(){ cout<<"Access GetUser"<<endl; }
        virtual void insertUser(){ cout<<"Access InsertUser"<<endl; }
    };
    
    //ACCESS部门
    class CAccessDepartment : public IDepartment
    {
    public:
        virtual void getDepartment(){ cout<<"Access GetDepartment"<<endl; }
        virtual void insertDepartment(){ cout<<"Access InsertDepartment"<<endl; }
    };
    
    //SQL用户
    class CSqlUser : public IUser
    {
    public:
        virtual void getUser(){ cout<<"Sql User"<<endl; }
        virtual void insertUser(){ cout<<"Sql User"<<endl; }
    };
    
    //SQL部门类
    class CSqlDepartment : public IDepartment
    {
    public:
        virtual void getDepartment(){ cout<<"Sql GetDepartment"<<endl; }
        virtual void insertDepartment(){ cout<<"Sql InsertDepartment"<<endl; }
    };
    
    //抽象工厂
    class IFactory
    {
    public:
        virtual IUser* createUser() = 0;
        virtual IDepartment* createDepartment() = 0;
    };
    
    //ACCESS 工厂
    class AccessFactory : public IFactory
    {
    public:
        virtual IUser* createUser(){ return new CAccessUser(); }
        virtual IDepartment* createDepartment(){ return new CAccessDepartment(); }
    };
    
    //SQL 工厂
    class SqlFactory : public IFactory
    {
    public:
        virtual IUser* createUser(){ return new CSqlUser(); }
        virtual IDepartment* createDepartment(){ return new CSqlDepartment(); }
    };
    
    #endif //__ABSTRACT_FACTORY_MODEL__
    
    /*
    #include "AbstractFactoryModel.h"
    int _tmain(int argc, _TCHAR* argv[])
    {
        IFactory* factory = new SqlFactory();
        IUser* user = factory->createUser();
        IDepartment* depart = factory->createDepartment();
        user->getUser();
        depart->getDepartment();
    
        return 0;
    }
    */
  • 相关阅读:
    summernote 上传图片到图片服务器的解决方案(springboot 成功)
    rabbitmq 命令行与控制台
    redis 集群
    rabbitmq快速安装(实测有效)(新版)
    设计模式-5适配器模式
    Nginx做缓存
    Redis的高可用
    正则表达式
    常用的实例场景(.net js jq)
    sentry的安装
  • 原文地址:https://www.cnblogs.com/MrGreen/p/3416944.html
Copyright © 2011-2022 走看看