#include <stdlib.h>
#include <iostream>
using namespace std; class Product
{
public:
virtual ~Product() {}
virtual int Interface()=;
}; class ConcreteProductA : public Product
{
public:
ConcreteProductA() {}
virtual ~ConcreteProductA() {} int Interface()
{
cout<<"Make my ProductA good!"<<endl;
return -;
}
}; class ConcreteProductB : public Product
{
public:
ConcreteProductB() {}
virtual ~ConcreteProductB() {} int Interface()
{
cout<<"Make my ProductB better!"<<endl;
return ;
}
}; class ConcreteProductC : public Product
{
public:
ConcreteProductC() {}
virtual ~ConcreteProductC() {} int Interface()
{
cout<<"Make my ProductC best!"<<endl;
return ;
}
}; #define PRODUCTA 1
#define PRODUCTB 2
#define PRODUCTC 3 class SimpleFactory
{
public:
static Product* CreateProduct(int iType)
{
switch(iType)
{
case PRODUCTA: return new ConcreteProductA;
case PRODUCTB: return new ConcreteProductB;
case PRODUCTC: return new ConcreteProductC;
default:
{
cerr<<"Sorry, I have not the product you need!"<<endl;
return NULL;
}
}
}
}; #define CUSTOMER main
#define DESTROY(ptr) if (ptr) { delete ptr; ptr = NULL; } int CUSTOMER(int argc, char** argv)
{
Product* pProduct = NULL; pProduct = SimpleFactory::CreateProduct(PRODUCTA);
pProduct->Interface();
DESTROY(pProduct); pProduct = SimpleFactory::CreateProduct(PRODUCTB);
pProduct->Interface();
DESTROY(pProduct); pProduct = SimpleFactory::CreateProduct(PRODUCTC);
pProduct->Interface();
DESTROY(pProduct); return EXIT_SUCCESS;
}

simple_factory的更多相关文章

  1. Java设计模式(一) 简单工厂模式不简单

    摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...

  2. 【创建型】Abstract Factory模式 & Factory Method模式

    本文主要介绍简单工厂模式与抽象工厂模式.以下如有叙述不当之处,欢迎批评指正,欢迎交流探讨. 一:简单工厂模式 在23种设计模式中,简单工厂模式其实是不在列的,但理解该模式对于抽象工厂模式的思想理解是有 ...

  3. 【51】java设计模式-工厂设计模式剖析

    工厂设计设计模式的分类: 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Factory):不利于产生系列产品: 2)工厂方法模式(Factory Method) ...

随机推荐

  1. c++中的强制转换static_cast、dynamic_cast、reinterpret_cast的不同用法儿

    c++中的强制转换static_cast.dynamic_cast.reinterpret_cast的不同用法儿   虽然const_cast是用来去除变量的const限定,但是static_cast ...

  2. HOWTO install Oracle 11g on Ubuntu Linux 12.04 (Precise Pangolin) 64bits

    安装了Ubuntu 12.04 64bit, 想在上面安装Oracle 11gr2,网上找了好多文档都没成功,最后完全参考了MordicusEtCubitus的文章. 成功安装的关键点:install ...

  3. 增加字段关联插件 For PHPCMS V9 免费版

    增加字段关联插件 For PHPCMS V9 免费版 第一:增加字段选择关联 第二:关联后的效果 烈火下载友情提示:增加方法详见附件内的说明文档. 附件下载

  4. mysql索引常见问题

    一:对于先建索引再插入和先插入再统一建索引效率: 对于大数量的表来说, 先加载数据再来定义全文索引的 速度要远远优于在一个已经定义好全文索引的表里面插入大量数据的速度.一定会问:这是问什么呢?其实,道 ...

  5. Cross Site Request Forgery (CSRF)--spring security -转

    http://docs.spring.io/spring-security/site/docs/3.2.0.CI-SNAPSHOT/reference/html/csrf.html 13. Cross ...

  6. BootStrap2学习日记5---列表

    常用列表标签有3中如下:<ul><li><ol><li><dl><dt><dd> 例子: <div class ...

  7. ASP.NET MVC 之 路由配置

    主要操作在App_Start 目录下的 RouteConfig.cs 文件. 一.Url构造方式 1.命名参数规范+匿名对象 routes.MapRoute( name: "Default& ...

  8. 普通字符串与Hex编码字符串之间转换

    import java.io.UnsupportedEncodingException; import org.apache.commons.codec.binary.Hex; public clas ...

  9. css笔记07:通配符选择器

    通配符选择器: * { margin:10px ;//默认四个位置参数全为零 margin-top:10px;//分别设置四个参数 margin-left:10px; margin-right:0px ...

  10. django–url

    当我们创建了一个项目时,系统为我们创建了一份urlconf, 它可能是这样的: urlpatterns = [ url(r'^admin/', admin.site.urls), ] r'^admin ...