class Product
{
public:
virtual ~Product() {}
virtual void DoSomething()=;
}; class ProductA : public Product
{
public:
ProductA() {}
~ProductA() {} virtual void DoSomething();
}; class ProductB : public Product
{
public:
ProductB() {}
~ProductB() {} virtual void DoSomething();
}; class ProductC : public Product
{
public:
ProductC() {}
~ProductC() {} virtual void DoSomething();
}; void ProductA::DoSomething()
{
cout<<"ProductA::DoSomething"<<endl;
} void ProductB::DoSomething()
{
cout<<"ProductB::DoSomething"<<endl;
} void ProductC::DoSomething()
{
cout<<"ProductC::DoSomething"<<endl;
} class Factory
{
public:
virtual ~Factory() {}
virtual Product* CreateProduct()=;
}; class FactoryA : public Factory
{
public:
FactoryA() {}
virtual ~FactoryA() {}
virtual Product* CreateProduct();
}; class FactoryB : public Factory
{
public:
FactoryB() {}
virtual ~FactoryB() {}
virtual Product* CreateProduct();
}; class FactoryC : public Factory
{
public:
FactoryC() {}
virtual ~FactoryC() {}
virtual Product* CreateProduct();
}; Product* FactoryA::CreateProduct()
{
return new ProductA;
} Product* FactoryB::CreateProduct()
{
return new ProductB;
} Product* FactoryC::CreateProduct()
{
return new ProductC;
} #define DESTROY(ptr) if (ptr) { delete ptr; ptr = NULL; } int main(int argc, char *argv[])
{
Factory* pFactory = NULL;
Product* pProduct = NULL; pFactory = new FactoryA;
pProduct = pFactory->CreateProduct();
pProduct->DoSomething(); DESTROY(pFactory);
DESTROY(pProduct); pFactory = new FactoryB;
pProduct = pFactory->CreateProduct();
pProduct->DoSomething(); DESTROY(pFactory);
DESTROY(pProduct); pFactory = new FactoryC;
pProduct = pFactory->CreateProduct();
pProduct->DoSomething(); DESTROY(pFactory);
DESTROY(pProduct); return ;
}

Factory_Method的更多相关文章

  1. 【编程思想】【设计模式】【创建模式creational 】工厂模式factory_method

    Python版 https://github.com/faif/python-patterns/blob/master/creational/factory_method.py #!/usr/bin/ ...

  2. Java设计模式(二) 工厂方法模式

    本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 原创文章.同步自作者个人博客 http://www.jasongj.com/design_patte ...

  3. Spring笔记(二)Core层

    Spring用一种非入侵的方式来管理程序,模块结构图如下:   .Core层 IOC(控制反转):应用本身程序不负责依赖对象的创建及维护,依赖对象的创建及维护有外设容器负责,即:IOC: DI(依赖注 ...

  4. cglib源码分析(一): 缓存和KEY

    cglib是一个java 字节码的生成工具,它是对asm的进一步封装,提供了一系列class generator.研究cglib主要是因为它也提供了动态代理功能,这点和jdk的动态代理类似. 一. C ...

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

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

  6. 设计模式——工厂方法模式(C++实现)

    #include <iostream> #include <string> using namespace std; class CProduct { public: ; }; ...

  7. 工厂方法模式-Factory Method(Java实现)

    工厂方法模式-Factory Method 工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法让实例化的具体内容交给子类工厂来进行. 本文中的例子是这样的. 生产一个身份证, ...

  8. 「PHP」工厂方法模式

    引言   所属:创建型模式,常用设计模式之一 工厂模式分为:简单工厂模式.工厂方法模式.静态工厂模式.抽象工厂模式. 下面为工厂方法模式. 参考资料: <大话设计模式>程杰   模式概述 ...

  9. spring源码深度解析— IOC 之 默认标签解析(上)

    概述 接前两篇文章  spring源码深度解析—Spring的整体架构和环境搭建  和  spring源码深度解析— IOC 之 容器的基本实现 本文主要研究Spring标签的解析,Spring的标签 ...

随机推荐

  1. c++ 设计模式5 (Observer / Event 观察者模式)

    3.3 观察者模式 (Observer)/发布-订阅模式 动机: 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都能得 ...

  2. 【Android 界面效果15】Android UI 之一步步教你自定义控件(自定义属性、合理设计onMeasure、合理设计onDraw等)

        Android开发做到了一定程度,多少都会用到自定义控件,一方面是更加灵活,另一方面在大数据量的情况下自定义控件的效率比写布局文件更高.     一个相对完善的自定义控件在布局文件中和java ...

  3. 重构17-Extract Superclass(提取父类)

    当一个类有很多方法希望将它们“提拔”到基类以供同层次的其他类使用时,会经常使用该重构.下面的类包含两个方法,我们希望提取这两个方法并允许其他类使用. public class Dog { public ...

  4. Session共享的简单总结

    1.同服务器.同一域名.不同应用(端口.虚拟目录等) 这种很简单,把sessionState保存到SQLServer,aspnet_regsql之后,修改存储过程TempGetAppID,把 SET ...

  5. 谷歌浏览器-如何让Chrome默认以隐身模式启动?

    桌面图标右键属性,在“目标”后添加参数“ --incognito”(注意是双短划线,不包括双引号,双短划线前加一空格)就可以直接以隐身模式启动Chrome浏览器

  6. 【java.math.BigInteger】常用函数

    1. /* 返回此BigInteger的函数正负号. 此方法返回-1,0或1作为此BigInteger的值对应是负,零或正数. */ java.math.BigInteger.signum(BigIn ...

  7. linux和Windows下文本格式转换

    1.安装转换工具:sudo apt-get install tofrodos 2.开始转换:fromdos grade.sh

  8. sublime text 3 扩展插件SideBarEnhancements用法教程

    SideBarEnhancements本是增强侧边栏的插件,这里将教大家如何用来做sublime text 3浏览器预览插件,并可自定义浏览器预览的快捷键. 第一步:安装此插件,搜索相关教程,本博客有 ...

  9. ruby学习--block

    #当前块 class Block def a_method return yield if block_given? 'no block' end end obj=Block.new puts &qu ...

  10. LINQ to SQL 语句(2)之 Select/Distinct

    LINQ to SQL 语句(2)之 Select/Distinct [1] Select 介绍 1 [2] Select 介绍 2 [3] Select 介绍 3 和  Distinct 介绍 Se ...