适用情境:定义一个类,此类创建一系列相关接口.
// product.h
#ifndef PRODUCT_H
#define PRODUCT_H
class Product
{
public:
Product();
virtual void Show() = 0;
public:
int m_id;
};
#endif // PRODUCT_H
// product.cpp
#include "product.h"
Product::Product()
{}
// concreteproduct.h
#ifndef CONCRETEPRODUCT_H
#define CONCRETEPRODUCT_H
#include "product.h"
class ConcreteProduct : public Product
{
public:
ConcreteProduct();
virtual void Show();
};
#endif // CONCRETEPRODUCT_H
// concreteproduct.cpp
#include "concreteproduct.h"
#include <iostream>
ConcreteProduct::ConcreteProduct()
{}
void ConcreteProduct::Show()
{
std::cout << m_id << std::endl;
}
// factory.h
#ifndef FACTORY_H
#define FACTORY_H
#include "product.h"
class Factory
{
public:
Factory();
virtual Product* CreateProduct() = 0;
};
#endif // FACTORY_H
// factory.cpp
#include "factory.h"
Factory::Factory()
{}
// concretefactory.h
#ifndef CONCRETEFACTORY_H
#define CONCRETEFACTORY_H
#include "factory.h"
class ConcreteFactory : public Factory
{
public:
ConcreteFactory();
virtual Product* CreateProduct();
};
#endif // CONCRETEFACTORY_H
// concretefactory.cpp
#include "concretefactory.h"
#include "concreteproduct.h"
ConcreteFactory::ConcreteFactory()
{}
Product* ConcreteFactory::CreateProduct()
{
ConcreteProduct * product = new ConcreteProduct();
product->m_id = 222;
return product;
}
客户端:
// main.cpp
#include <iostream>
#include "factory.h"
#include "product.h"
#include "concretefactory.h"
#include "concreteproduct.h"
using namespace std;
int main(int argc, char *argv[])
{
Factory *factory = new ConcreteFactory();
Product *product = factory->CreateProduct();
product->Show();
return 0;
}