设计模式-工厂方法模式

来源:互联网 发布:淘宝数据监控 编辑:程序博客网 时间:2024/06/07 03:58

适用情境:与简单工厂模式相比,由客户端做判断.

// product.h#ifndef PRODUCT_H#define PRODUCT_Hclass 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;}
0 0
原创粉丝点击