设为首页 加入收藏

TOP

C++实现抽象工厂模式教程(一)
2017-10-19 09:21:45 】 浏览:552
Tags:实现 抽象 工厂 模式 教程

C++实现抽象工厂模式教程

#include 
  
   
using namespace std;

//抽象产品类
class AbstractProduct{
public:
    virtual void ProductFunction() = 0;     //子类可以重写该函数来实现不同子类的特有功能
    virtual ~AbstractProduct(){}
};

//具体产品类,有实现自己功能的成员函数
class ConcreteProductA:public AbstractProduct{
public:
    void ProductFunction()
    {
        cout << "ConcreteProductA do its function" << endl;
    }
};

class ConcreteProductB:public AbstractProduct{
public:
    void ProductFunction()
    {
        cout << "ConcreteProductB do its function" << endl;
    }
};

//抽象工厂类,可以生产不同的产品
class AbstractFactory{
public:
    virtual AbstractProduct* CreateProduct() = 0;
    virtual ~AbstractFactory(){}
};

class ConcreteFactoryA:public AbstractFactory{
public:
    AbstractProduct* CreateProduct()
    {
        return new ConcreteProductA();
    }
};

class ConcreteFactoryB:public AbstractFactory{
public:
    AbstractProduct* CreateProduct()
    {
        return new ConcreteProductB();
    }
};

int main(int argc,char** argv)
{
    AbstractFactory *factoryA = new ConcreteFactoryA();
    AbstractFactory *factoryB = new ConcreteFactoryB();
    AbstractProduct *productA = factoryA->CreateProduct();
    AbstractProduct *productB = factoryB->CreateProduct();
    productA->ProductFunction();
    productB->ProductFunction();
    return 0;
}
  

以下是书中具体的一个DB例子

#include 
  
   
using namespace std;

class User{

};

class IUser{
public:
    virtual void Insert(User user) = 0;
    virtual void GetId(User user) = 0;
};

class SqlServerUser:public IUser{
public:
    void Insert(User user)
    {
        cout << "use sqlserver insert into user" << endl;
    }
    void GetId(User user)
    {
        cout << "use sqlserver get user id " << endl;
    }
};

class AccessUser:public IUser{
public:
    void Insert(User user)
    {
        cout << "use AccessUser insert into user" << endl;
    }
    void GetId(User user)
    {
        cout << "use AccessUser get user id " << endl;
    }
};

class IFactory{
public:
    virtual IUser* CreateUser() = 0;
};

class SqlServerFactory:public IFactory{
public:
    IUser* CreateUser()
    {
        return new SqlServerUser();
    }
};

class AcceseFactory:public IFactory{
public:
    IUser* CreateUser()
    {
        return new AccessUser();
    }
};

int main(int argc,char** argv)
{
    User user;
    IFactory* access = new AcceseFactory();
    IUser* accessUser = access->CreateUser();
    accessUser->Insert(user);
    return 0;
}
  

利用简单工厂来改进抽象工厂,也就是将选择工厂转移到类中决定,而不必通过继承的各种子类来决定

#include 
  
   
#include 
   
     using namespace std; //抽象产品类 class AbstractProduct{ public: virtual void ProductFunction() = 0; //子类可以重写该函数来实现不同子类的特有功能 virtual ~AbstractProduct(){} }; //具体产品类,有实现自己功能的成员函数 class ConcreteProductA:public AbstractProduct{ public: void ProductFunction() { cout << "ConcreteProductA do its function" << endl; } }; class ConcreteProductB:public AbstractProduct{ public: void ProductFunction() { cout << "ConcreteProductB do its function" << endl; } }; //产品枚举类,代表不同产品 enum ProductType{ ConcreteA, ConcreteB }; //抽象工厂类,可以生产不同的产品 class Factory{ public: static AbstractProduct* CreateProduct() { switch (m_ProductType) { case ConcreteA: return new ConcreteProductA(); break; case Concret
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇c++开发模板notepad++插件开发入门 下一篇C++ 资源大全

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目