作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4251756.html

所谓简单工厂模式,是一种实例化对象的方式,只要输入需要实例化对象的名字,就可以通过工厂对象的相应工厂函数来制造你需要的对象。

简单工厂模式的核心是,对于一个父类的多个继承子类,工厂对象的工厂函数根据用户输入,自动new出一个子类对象并返回其父类的指针,这样利用父类的指针执行父类的虚函数,就可以动态绑定子类的重写函数,从而实现多态。

对于一个只拥有加减乘除运算的简单计算器,我们设计一个Operation的父类,并构造加减乘除四个类继承父类重写运算函数GetResult。然后定义工厂类中的工厂函数,其根据用户的输入new出相应的对象实例并返回其父类的指针。

UML图如下所示:

C++代码如下所示,其中使用了智能指针类shared_ptr,当该对象的生命期结束时,其析构函数能够自动析构掉指针所指的对象。

 #include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <tr1/memory> using namespace std; class Operation
{
private:
double A, B;
public:
double GetA() const {return A;}
double GetB() const {return B;}
void SetA(double x) {A=x;}
void SetB(double y) {B=y;}
double virtual GetResult(){return ;}
Operation():A(), B(){}
}; class Add : public Operation
{
public:
double GetResult()
{
return GetA()+GetB();
}
}; class Sub : public Operation
{
public:
double GetResult()
{
return GetA()-GetB();
}
}; class Mul : public Operation
{
public:
double GetResult()
{
return GetA()*GetB();
}
}; class Div : public Operation
{
public:
double GetResult()
{
return GetA()/GetB();
}
}; class SimpleFactory
{
public:
static Operation * CreateOpeartor(char ch)
{
Operation * p;
switch(ch)
{
case '+':
p = new Add();
break;
case '-':
p = new Sub();
break;
case '*':
p = new Mul();
break;
case '/':
p = new Div();
break;
}
return p;
}
}; int main(int argc, char *argv[])
{
double A = ;
double B = ;
char ch = '\0';
cin>>A>>ch>>B; tr1::shared_ptr<Operation> op(SimpleFactory::CreateOpeartor(ch));
op->SetA(A);
op->SetB(B);
cout<<op->GetResult()<<endl;
}

本文参考自:程杰《大话设计模式》

C++实现设计模式之 — 简单工厂模式的更多相关文章

  1. C#设计模式(2)-简单工厂模式

    引言 上一遍中介绍了设计模式中的单例模式-C#设计模式(1)-单例模式,本篇将介绍简单工厂模式,也是比较容易理解的一种模式: 简单工厂模式简介 什么是简单工厂模式? 定义一个工厂类,它可以根据参数的不 ...

  2. C#设计模式(2)——简单工厂模式(转)

    C#设计模式(2)——简单工厂模式   一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理 ...

  3. Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)

    jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...

  4. 设计模式之简单工厂模式(Simple Factory)

    原文地址:http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/06/2579100.html 今天呢,要学习的设计模式是“简单工厂模式”,这是一个 ...

  5. iOS设计模式 - (3)简单工厂模式

    iOS设计模式 - (3)简单工厂模式           by Colin丶 转载请注明出处:              http://blog.csdn.net/hitwhylz/article/ ...

  6. 设计模式之简单工厂模式Simple Factory(四创建型)

    工厂模式简介. 工厂模式专门负责将大量有共同接口的类实例化 工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式有三种形态: 1.简单工厂模式Simple Factory ...

  7. php实现设计模式之 简单工厂模式

    作为对象的创建模式,用工厂方法代替new操作. 简单工厂模式是属于创建型模式,又叫做静态工厂方法模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 工厂 ...

  8. [python实现设计模式]-3.简单工厂模式-触宝开放平台

    预备知识: 开放封闭原则(Open-Closed Principle OCP) Software entities(classes,modules,functions etc) should open ...

  9. C#设计模式之简单工厂模式

    简单工厂模式解释:  简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern) 是通过专门定义一 ...

随机推荐

  1. alljoyn连接时-fno-rtti选项测试结果

    以AllJoyn自带的chat示例在pc上测试结果如下: libAllJoyn.a编译选项 Chat编译选项 测试结果 -Wall -Werror=non-virtual-dtor -pipe -st ...

  2. python 操作word文档

    因为工作需要操作一些word文档,记录一下学习思路 #-*- encoding: utf8 -*- import win32com from win32com.client import Dispat ...

  3. what is docker

    尽管之前久闻Docker的大名了,但是天资愚钝,对其到底是个啥东西一直摸不清,最近花了一段时间整理了一下,算是整理出一点头绪来. 官网的介绍是这样的: Docker is an open platfo ...

  4. gridview_RowCommand 获取当前行中的控件

    <asp:GridView ID="gvStorglog" runat="server" Width="100%" SkinID=&q ...

  5. C# 之 user32函数库

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...

  6. 给VPS装桌面

    转自:百度经验  致谢! 1.首先我们要先升级一下软件源给安装桌面环境做准备. 执行命令:apt-get update   2.安装桌面环境或窗口管理器: apt-get install xubunt ...

  7. codeforces 676B B. Pyramid of Glasses(模拟)

    题目链接: B. Pyramid of Glasses time limit per test 1 second memory limit per test 256 megabytes input s ...

  8. ZOV压敏电阻

    http://www.zov.net.cn/download/spd_07D.htm http://item.taobao.com/item.htm?spm=a1z10.5.w4002-1369342 ...

  9. PHP计算中英混输字符串长度

    最近做项目中碰到需要post value length check的这么一个情况 有这么一个需求, 需要backend来处理post过来的中英混输的数据. 对其限制的规则是中文10个字符, 英文20个 ...

  10. JavaScript--基本包装类型(13)

    // JS为了便于操作基本类型,提供了3个特殊的引用类型:Boolean/Number和String; 一 基本包装类型概述 // 实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装 ...