適用情境:與簡單工廠模式相比,由客戶端做判斷.
// product.h
#ifndef PRODUCT_H
#define PRODUCT_H
class Product
{
public:
Product();
virtual void Show() = 0;
};
#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 << "Concrete product" << 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"
#include "product.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()
{
return new ConcreteProduct();
}
// main.cpp
#include <iostream>
#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();
delete product;
delete factory;
return 0;
}