Factory_Method
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的更多相关文章
- 【编程思想】【设计模式】【创建模式creational 】工厂模式factory_method
Python版 https://github.com/faif/python-patterns/blob/master/creational/factory_method.py #!/usr/bin/ ...
- Java设计模式(二) 工厂方法模式
本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 原创文章.同步自作者个人博客 http://www.jasongj.com/design_patte ...
- Spring笔记(二)Core层
Spring用一种非入侵的方式来管理程序,模块结构图如下: .Core层 IOC(控制反转):应用本身程序不负责依赖对象的创建及维护,依赖对象的创建及维护有外设容器负责,即:IOC: DI(依赖注 ...
- cglib源码分析(一): 缓存和KEY
cglib是一个java 字节码的生成工具,它是对asm的进一步封装,提供了一系列class generator.研究cglib主要是因为它也提供了动态代理功能,这点和jdk的动态代理类似. 一. C ...
- 【创建型】Abstract Factory模式 & Factory Method模式
本文主要介绍简单工厂模式与抽象工厂模式.以下如有叙述不当之处,欢迎批评指正,欢迎交流探讨. 一:简单工厂模式 在23种设计模式中,简单工厂模式其实是不在列的,但理解该模式对于抽象工厂模式的思想理解是有 ...
- 设计模式——工厂方法模式(C++实现)
#include <iostream> #include <string> using namespace std; class CProduct { public: ; }; ...
- 工厂方法模式-Factory Method(Java实现)
工厂方法模式-Factory Method 工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法让实例化的具体内容交给子类工厂来进行. 本文中的例子是这样的. 生产一个身份证, ...
- 「PHP」工厂方法模式
引言 所属:创建型模式,常用设计模式之一 工厂模式分为:简单工厂模式.工厂方法模式.静态工厂模式.抽象工厂模式. 下面为工厂方法模式. 参考资料: <大话设计模式>程杰 模式概述 ...
- spring源码深度解析— IOC 之 默认标签解析(上)
概述 接前两篇文章 spring源码深度解析—Spring的整体架构和环境搭建 和 spring源码深度解析— IOC 之 容器的基本实现 本文主要研究Spring标签的解析,Spring的标签 ...
随机推荐
- php与mysql通讯那点事
php与mysql通讯那点事 http://www.cnxct.com/libmysql-mysqlnd-which-is-best-and-what-about-mysqli-pdomysql-my ...
- 安装apache2.4.10
一:依赖安装:apache依赖于apr,apr-util,pcre,所以需要先安装他,并且需要最新的 apr官网:http://apr.apache.org/download.cgi pcre官网:h ...
- 配置apache、php、mysql之间的关系
1.index.php文件放入/usr/local/apache2/htdocs 目录下 其中index.php里面内容为: <?php phpinfo(); $dbc= mysql_conne ...
- main方法无法编译
main方法无法编译,可能是没有括号的原因
- CSS浮动属性Float到底什么怎么回事,下面详细解释一下
float 是 css 的定位属性.在传统的印刷布局中,文本可以按照需要围绕图片.一般把这种方式称为“文本环绕”.在网页设计中,应用了CSS的float属性的页面元素就像在印刷布局里面的被文字包围的图 ...
- ios 把毫秒值转换成日期 NSDate
ios 把毫秒值转换成日期 (比较好用) 1343359790000 这是毫秒值------最佳解决方案-------------------- long long time=134335979000 ...
- hadoop环境安装及简单Map-Reduce示例
说明:这篇博客来自我的csdn博客,http://blog.csdn.net/lxxgreat/article/details/7753511 一.参考书:<hadoop权威指南--第二版(中文 ...
- 【阿里云产品公测】ACE安装wordpress博客图文教程
作者:阿里云用户51干警网 阿里云ace搭建wordpress图文教程 按照大大说的,wordpress确实能够轻松创建,只有几步. 我想说,小白的世界技术大大还是不了解.想当初我了解一下怎么 ...
- TFS 2010 使用手册(一)安装与配置
本文转自cnblogs 大辉狼 的文章: http://www.cnblogs.com/wph1129/archive/2010/11/10/1873348.html http://www.cnblo ...
- jquery.validate.js实例演示
validate是前端重要的交互手段,提升性能的同时更能提升用户操作体验,validate的实现大概有三种方式:HTML5部分支 持,validate验证框架,手动写js或ajax调用接口.使用val ...