C++设计模式之工厂模式

//产品父类声明
#pragma
once #include "iostream" using namespace std; class Product { public: virtual void PrintfName(); Product(void); ~Product(void); };
//产品A类
#pragma
once #include "product.h" class ProductA : public Product { public: virtual void PrintfName(); ProductA(void); ~ProductA(void); }; #include "ProductA.h" ProductA::ProductA(void) { } ProductA::~ProductA(void) { } void ProductA::PrintfName() { cout<<"This is ProductA"<<endl; }
//产品B类
#pragma
once #include "Product.h" class ProductB : public Product { public: virtual void PrintfName(); ProductB(void); ~ProductB(void); }; #include "ProductB.h" ProductB::ProductB(void) { } ProductB::~ProductB(void) { } void ProductB::PrintfName() { cout<<"This is ProductB"<<endl; }
//创建父类声明
#pragma
once #include "Product.h" class Creator { public: virtual Product* GetProduct()=0; Creator(void); ~Creator(void); };
////产品A的创建
#pragma
once #include "ProductA.h" #include "creator.h" class CreatorA: public Creator { public: virtual ProductA* GetProduct(); CreatorA(void); ~CreatorA(void); }; #include "CreatorA.h" CreatorA::CreatorA(void) { } ProductA* CreatorA::GetProduct() { return (new ProductA()); } CreatorA::~CreatorA(void) { }
//产品B的创建
#pragma
once #include "creator.h" #include "ProductB.h" class CreatorB : public Creator { public: virtual ProductB* GetProduct(); CreatorB(void); ~CreatorB(void); }; #include "CreatorB.h" CreatorB::CreatorB(void) { } CreatorB::~CreatorB(void) { } ProductB *CreatorB::GetProduct() { return (new ProductB()); }
// Factory.cpp : 定义控制台应用程序的入口点。
//工厂模式调用

#include "stdafx.h"
#include "Creator.h"
#include "CreatorA.h"
#include "CreatorB.h"
#include "ProductA.h"
#include "ProductB.h"
int _tmain(int argc, _TCHAR* argv[])
{
    Creator* ca=new CreatorA();
    Creator* cb=new CreatorB();
    Product* pa=ca->GetProduct();
    Product* pb=cb->GetProduct();
    pa->PrintfName();
    pb->PrintfName();
    getchar();
    delete ca;
    delete cb;
    delete pa;
    delete pb;
    return 0;
}

原文地址:https://www.cnblogs.com/shencheng5721/p/3638643.html