用简单工厂模式实现一个计算器类:

 #include <iostream>
#include <string> using namespace std; class Operation
{
public:
Operation(double numA = , int numB = ) : numberA(numA), numberB(numB)
{
}
virtual ~Operation()
{
cout << "~Operation()" << endl;
}
virtual double GetResult()
{
double result = ;
return result;
}
protected:
double numberA;
double numberB;
}; class OperationAdd : public Operation
{
public :
OperationAdd(double numA = , int numB = ) : Operation(numA, numB)
{
}
virtual ~OperationAdd()
{
cout << "~OperationAdd()" << endl;
}
virtual double GetResult()
{
double result = ;
result = numberA + numberB;
return result;
}
};
class OperationSub : public Operation
{
public :
OperationSub(double numA = , int numB = ) : Operation(numA, numB)
{
}
virtual ~OperationSub()
{
cout << "~OperationSub()" << endl;
}
virtual double GetResult()
{
double result = ;
result = numberA - numberB;
return result;
}
}; class OperationFactory
{
public :
virtual ~OperationFactory()
{
}
static Operation* createOperate(double numA, double numB, char operate)
{
Operation* oper;
switch (operate)
{
case '+' :
oper = new OperationAdd(numA, numB);
break;
case '-' :
oper = new OperationSub(numA, numB);
break;
default :
oper = ;
break;
}
return oper;
}
}; int main()
{
Operation* oper;
oper = OperationFactory::createOperate(, , '+');
double result = oper->GetResult();
cout << result << endl;
delete oper;
return ;
}

简单工厂模式实现计算器

简单工厂模式的抽象实现:

 #include <iostream>

 using namespace std;

 class Product
{
public :
Product()
{
}
~Product()
{
}
virtual void CreateProduct()
{
}
private :
//
}; class ProductA : public Product
{
public :
ProductA() : Product()
{
cout << "ProductA()" << endl;
}
~ProductA()
{
cout << "~ProductA()" << endl;
}
virtual void CreateProduct()
{
}
}; class ProductB : public Product
{
public :
ProductB() : Product()
{
cout << "ProductB()" << endl;
}
~ProductB()
{
cout << "~ProductB()" << endl;
}
virtual void CreateProduct()
{
}
}; class SimpleFactory
{
public :
static Product* Create(int type)
{
//Product *prod;
switch (type)
{
case :
prod = new ProductA;
break;
case :
prod = new ProductB;
break;
default :
prod = ;
}
return prod;
}
~SimpleFactory()
{
delete prod;
}
private :
static Product *prod;
};
Product* SimpleFactory::prod = ; int main()
{
Product* prod;
prod = SimpleFactory::Create();
return ;
}

简单工厂模式

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

  1. PHP设计模式(一)简单工厂模式 (Simple Factory For PHP)

    最近天气变化无常,身为程序猿的寡人!~终究难耐天气的挑战,病倒了,果然,程序猿还需多保养自己的身体,有句话这么说:一生只有两件事能报复你:不够努力的辜负和过度消耗身体的后患.话不多说,开始吧. 一.什 ...

  2. C#设计模式之简单工厂模式(Simple Factory)

    1. 概述 简单工厂模式就是将一个类的实例化交给一个静态工厂来执行. 2. 使用频率 中 3. 模式结构 3.1 机构图 3.2 模式中的角色 Product:抽象类,把具体产品类公共的代码进行抽象和 ...

  3. 设计模式 — 简单工厂模式(Simple Factory)

    定义:定义一个工厂类,它可以根据参数的不同返回不同类型的实例,被创建的实例通常有公共的父类. 模式类型:创建型模型 Factory(工厂角色):即工厂类,负责实现创建所有产品实例的内部逻辑:工厂类可以 ...

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

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

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

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

  6. 学习设计模式第二十七 - GoF之外简单工厂模式

    示例代码来自<深入浅出设计模式>和<大话设计模式> 概述 简单工厂模式又被称为静态工厂模式,属于类的创建型模式.其实质是由一个工厂类根据传入的参量,动态决定应该创建出哪一个产品 ...

  7. Objective-C 工厂模式(上) -- 简单工厂模式

    简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂 ...

  8. C#设计模式系列:简单工厂模式(Simple Factory)

    1. 简单工厂模式简介 1.1 定义 简单工厂模式定义一个Factory类,可以根据参数的不同返回不同类的实例,被创建的实例通常有共同的父类. 简单工厂模式只需要一个Factory类. 简单工厂模式又 ...

  9. 《JS设计模式笔记》 2,简单工厂模式

    <script type="text/javascript"> //简单工厂模式 //定义:由一个方法来决定到底要创建哪个类的实例,而这些实例经常拥有相同的接口.其实例 ...

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

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

随机推荐

  1. hdoj 1342 Lotto【dfs】

    Lotto Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  2. Conversion between json and object using SBJson lib

    Define two methods in an object class as follows: @interface MyObject : NSObject @property (nonatomi ...

  3. appium api

    AppiumDriver getAppStrings()      默认系统语言对应的Strings.xml文件内的数据.iOS driver.getAppStrings(Stringlanguage ...

  4. bootstrap+jQuery.validate表单校验

    谈谈表单校验 这大概是一种惯例,学习前台后台最开始接触的业务都是用户注册和登录.现在社会坚持以人为本的理念,在网站开发过程同样如此.User是我们面对较多的对象,也是较核心的对象.最开始的用户注册和登 ...

  5. jquery做个日期选择适用于手机端

    第一步:做个 文本框用于显示年月日的 第二步:点击文本框触发bootstrap模态框并显示 第三步:我是建一个外部js页面写的 js中获得当前时间是年份和月份,形如:201208       //获取 ...

  6. ※C++随笔※=>☆C++基础☆=>※№→C++中 #include<>与#include""

    #include<> 使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找: #include"" 使用双引号则表示首先在 ...

  7. Java中泛型 问号的作用

    这是jdk1.5泛型的典型应用: 第一种写法,叫做使用泛型方法:    public <T extends Object> void thisIsT(List <T> list ...

  8. 第三篇:python高级之生成器&迭代器

    python高级之生成器&迭代器   python高级之生成器&迭代器 本机内容 概念梳理 容器 可迭代对象 迭代器 for循环内部实现 生成器 1.概念梳理 容器(container ...

  9. 11.3 morning

    noip模拟题day1 总览(Overview)   题目名称 取模 等比数列 回文串 程序名 mod sequence palindromes 输入文件名 mod.in sequence.in pa ...

  10. 硬编码写RadioGroup的时候要注意设置RadioButton的Id

    硬编码写RadioGroup的时候要注意RadioButton的id重复问题,导致选择的时候出现能够多选的情况发生,如下代码,注意Id的设置,这样避免Radiobutton的id重复. /** * 生 ...