設計模式-工廠方法模式

適用情境:與簡單工廠模式相比,由客戶端做判斷.

// 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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章