zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    压缩脚本文件
    通用的访问非公有字段(Field)和属性组件
    调用加了SSL签名的WebService
    [译作]Class in Jscript Part I
    在UpdatePanel中使用Menu出错的解决方案
    到处遍是ASP.NET AJAX Released
    也谈约定胜于配置
    如何使用Orcas的CSS功能
    Ext js 2.0 Overview(3) 组件生命周期
    一些非常有用的备忘录文档
  • 原文地址:https://www.cnblogs.com/shencheng5721/p/3638643.html
Copyright © 2011-2022 走看看