实例1

#include <iostream>using namespace std;class Base  //基类
{
public:virtual void print(){cout << "Base show()" << endl;};
};class Derived_A : public Base   //派生类A
{
public:void print(){cout << "Derived_A show()" << endl;};
};class Derived_B : public Base   //派生类B
{
public:void print(){cout << "Derived_B show()" << endl;};
};class Factory   //工厂
{
public:Base *CreateApi( int flag );
};Base *Factory::CreateApi( int flag )
{if( 1 == flag ){return new Derived_A();}else if ( 2 == flag ){return new Derived_B();}
}Base *CreateProduction( int flag )
{if( 1 == flag ){return new Derived_A();}else if ( 2 == flag ){return new Derived_B();}
}int    main()
{Base *p = NULL;//Factory f;//    p = f.CreateApi( 1 );p = CreateProduction( 1 );p->print();
}

实例2

#include<iostream>
#include<string>using namespace std;class Animal{
protected: char * pos;
public: void printLivingPosition(){ cout << "I live in the " << pos << endl;}
};class Bird : public Animal{
public: Bird(){ pos =  "Sky";}
};class Fish : public Animal{
public: Fish(){ pos =  "Sea";}
};class AnimalFactory{ // 简单工厂
public:static Animal* createAnimal(string kind){if(strcmp("Fish",kind.c_str()) == 0)return new Fish();else if(strcmp("Bird",kind.c_str()) == 0)return new Bird();elsereturn NULL;}
};
int main(){Animal *a = AnimalFactory::createAnimal("Fish"); // 使用工厂进行实例化,完成多态a->printLivingPosition();Animal *b = AnimalFactory::createAnimal("Bird");b->printLivingPosition();delete(a);delete(b);return 0;
}

实例3

AbstractProduct.h

#ifndef _ABSTRACTPRODUCT_H_
#define _ABSTRACTPRODUCT_H_#include <stdio.h>class AbstractProduct{public:AbstractProduct();virtual ~AbstractProduct();public:virtual void operation() = 0;
};class ProductA:public AbstractProduct{public:ProductA();virtual ~ProductA();public:void operation();
};class ProductB:public AbstractProduct{public:ProductB();~ProductB();public:void operation();
};#endif

AbstractProduct.cpp

#include "AbstractProduct.h"AbstractProduct::AbstractProduct(){
}AbstractProduct::~AbstractProduct(){
}ProductA::ProductA(){
}ProductA::~ProductA(){
}void ProductA::operation(){fprintf(stderr,"productA operation!\n");
}ProductB::ProductB(){
}ProductB::~ProductB(){
}void ProductB::operation(){fprintf(stderr,"productB operation!\n");
}

SimpleFactory.h

#ifndef _SIMPLEFACTORY_H_
#define _SIMPLEFACTROY_H_#include <stdio.h>
#include "AbstractProduct.h"class AbstractFactory{public:AbstractFactory();virtual ~AbstractFactory();public:virtual AbstractProduct* createProduct(int type) = 0;
};class SimpleFactory:public AbstractFactory{public:SimpleFactory();~SimpleFactory();public:AbstractProduct* createProduct(int type);
};#endif

SimpleFactory.cpp

#include "SimpleFactory.h"AbstractFactory::AbstractFactory(){
}AbstractFactory::~AbstractFactory(){
}SimpleFactory::SimpleFactory(){
}SimpleFactory::~SimpleFactory(){
}AbstractProduct* SimpleFactory::createProduct(int type){AbstractProduct* temp = NULL;switch(type){case 1:temp = new ProductA();break;case 2:temp = new ProductB();break;default:break;}return temp;
}

client.cpp

#include "SimpleFactory.h"int main(){AbstractFactory* factory = new SimpleFactory();AbstractProduct* product = factory->createProduct(1);product->operation();delete product;product = NULL;product = factory->createProduct(2);product->operation();delete product;product = NULL;return 0;
}

三个简单工厂实例 - C++实现相关推荐

  1. 如何去掉超链接下划线用三个简单的实例来说明

    去掉超链接的下划线,需要用样式表CSS来控制,如果你暂时不想深入了解CSS的概念,下面将举三个简单的实例来说明如何控制超链接的下划线.用记事本打开网页源代码(也可以先用IE打开网页,然后点击IE菜单栏 ...

  2. 设计模式学习笔记(三)简单工厂、工厂方法和抽象工厂之间的区别

    设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory).工厂方法(Factory Method ...

  3. Net设计模式之简单工厂模式(Simple Factory Pattern)

    一.简单工厂模式简介(Bref Introduction)        简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实 ...

  4. 创建型模式:工厂模式(简单工厂+工厂方法+抽象工厂)

    一.引子 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰).Bmw(宝马).Audi(奥迪)),还雇了司机为他开车.不过,爆发户坐车时总是这样:上Benz车后跟司机说"开奔驰车!& ...

  5. 轻松看懂java设计模式简单工厂模式

    点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 精彩内容 java实战练习项目教程 2018微服务资源springboot.s ...

  6. java设计模式:简单工厂模式

    一.什么是简单工厂模式 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 二.简单工厂模式的角色和职责 1.工厂(C ...

  7. php的类图怎么生成_PHP设计模式之简单工厂模式

    PHP设计模式之简单工厂模式 先从简单工厂入门,不管是面试还是被他人面试,在问到设计模式的时候,大多数人都会提到工厂模式.毫无疑问,工厂相关的几种模式在设计模式中是最出名的也是应用比较广泛的一种模式. ...

  8. 简单工厂(Simple Pattern)模式

    一.简单工厂(Simple Factory)模式 Simple Factory 模式根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返回的类都有一个公共的父类和公共的方法. Simple F ...

  9. 设计模式学习笔记------简单工厂

    简单工厂 一.实例1 1 /** 2 * 定义接口 3 * @author abc 4 * 5 */ 6 public interface Api { 7 public void test1(); 8 ...

最新文章

  1. 微软职位内部推荐-Sr SDE for Win Apps Ecosystem
  2. linux修改ssh端口
  3. 珠海网络推广浅析网站优化面对搜索引擎算法更新怎样才能应对自如?
  4. 机器学习练习数据哪里找?两行代码搞定!
  5. java elementtext_java命名空间javax.xml.stream接口xmlstreamreader成员方法: getelementtext定义参考...
  6. RTT的线程同步篇——事件
  7. springboot 修改页面不重启
  8. csync2+sqlite实现数据的高效实时的增量备份
  9. 【生信进阶练习1000days】day6-OrganismDb packages
  10. JavaCV推流实战(MP4文件)
  11. Python3从搜狐国际新闻抓取---完整版
  12. QT学习教程-(1)QT新建项目并打包hellow world
  13. 声纹采集是什么?标准声纹采集终端设备的作用是什么?
  14. 插上移动硬盘计算机没反应,usb硬盘插上电脑没反应怎么办,手把手教你怎么解决...
  15. 偏微分方程的matlab解法微盘,偏微分方程的MATLAB解法--陆君安.pdf
  16. 短视频如何选择背景音乐和配音?四个技巧来帮忙
  17. Oracle Cursor
  18. 小学计算机网络基础知识课件,小学信息技术优质课课件
  19. CAN总线之通俗易懂----工业连接器
  20. 怎么屏蔽还有照片_华为手机中老是出现不明照片?这些功能一定要注意,尽量将其关闭...

热门文章

  1. 从hotspot底层对象结构理解锁膨胀升级过程||深入jdk源码理解longadder的分段cas优化机制——分段CAS优化
  2. JSplitPane
  3. Java 技术篇 - ServerSocket接收http的url请求中包含中文的处理方法,URLDecode与URLEncode,url解码与编码
  4. 不支持图形化界面的Linux系统如何显示图像化界面?飞腾服务器显示图像化界面方法,DISPLAY environment variable is undefined问题解决方法
  5. C++——static
  6. 5.7 matlab数据插值与曲线拟合的比较
  7. 训练生成对抗网络的过程中,训练gan的地方为什么这里没有detach,怎么保证训练生成器的时候不会改变判别器
  8. boostrap 鼠标滚轮滑动图片_Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法...
  9. vscode MPE puppeteer导出pdf的数学公式显示问题
  10. docker-部署elk-6.1.3