简单工厂模式结构图:

简单工厂模式以简单的加减乘除运算为例:

运算符类(Operation):

namespace CalcTest.Simple_Factory_patterns
{
class Operation
{
private double numberA = ;
private double numberB = ;
public double NumberA
{
get { return numberA; }
set { numberA = value; }
} public double NumberB
{
get { return numberB; }
set { numberB = value; }
} public virtual double GetResult()
{
double result = ;
return result;
}
}
}

加法类(Add):继承于运算符类(Operation)

 namespace CalcTest.Simple_Factory_patterns
{
class Add :Operation
{
public override double GetResult()
{
return NumberA + NumberB;
}
}
}

减法类(Subtraction):继承于运算符类(Operation)

 namespace CalcTest.Simple_Factory_patterns
{
class Subtraction : Operation
{
public override double GetResult()
{
return NumberA - NumberB;
}
}
}

乘法类(Multiplacation):继承于运算符类(Operation)

 namespace CalcTest.Simple_Factory_patterns
{
class Multiplication : Operation
{
public override double GetResult()
{
return NumberA * NumberB;
}
}
}

除法类(Division):继承于运算符类(Operation)

 namespace CalcTest.Simple_Factory_patterns
{
class Division : Operation
{
public override double GetResult()
{
if (NumberB == )
{
throw new Exception("除数不能为0");
}
return NumberA / NumberB;
}
}
}

运算符工厂类(OperationFactory):实例合适的对象,通过多态返回父类的方式实现计算结果

 namespace CalcTest.Simple_Factory_patterns
{
class OperationFactory
{
public static Operation createOperation(string operate)
{
Operation oper = null;
switch (operate)
{
case "+":
oper = new Add();
break;
case "-":
oper = new Subtraction();
break;
case "*":
oper = new Multiplication();
break;
case "/":
oper = new Division();
break;
}
return oper;
}
}
}

测试类(Main):

 namespace CalcTest.Simple_Factory_patterns
{
class TestMain
{
public static void Main(string[] args)
{
Operation oper = null;
//先输入操作符利用简单工厂模式创建类
Console.Write("请输入操作符:(+、-、*、/)");
string operate = Console.ReadLine();
oper = OperationFactory.createOperation(operate); Console.Write("请输入数字A:");
oper.NumberA = Convert.ToDouble(Console.ReadLine()); Console.Write("请输入数字B:");
oper.NumberB = Convert.ToDouble(Console.ReadLine());
double result = oper.GetResult();
Console.WriteLine("结果为:" + result);
Console.ReadLine();
}
}
}

简单工厂模式操作结束!

设计模式之—简单工厂模式<Simple Factory Pattern >的更多相关文章

  1. 【设计模式】简单工厂模式 Simple Factory Pattern

    简单工厂模式Simple Factory Pattern[Simple Factory Pattern]是设计模式里最简单的一个模式,又叫静态工厂模式[Static Factory Pattern], ...

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

    一.简单工厂模式的由来 所有设计模式都是为解决某类问题而产生的,那么简单工厂模式是为解决什么问题呢?我们假设有以下业务场景: 在一个学生选课系统中,文科生用户选课时,我们要获得文科生的所有课程列表:理 ...

  3. 【UE4 设计模式】简单工厂模式 Simple Factory Pattern

    概述 描述 又称为静态工厂方法 一般使用静态方法,根据参数的不同创建不同类的实例 套路 创建抽象产品类 : 创建具体产品类,继承抽象产品类: 创建工厂类,通过静态方法根据传入不同参数从而创建不同具体产 ...

  4. Golang设计模式—简单工厂模式(Simple Factory Pattern)

    Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...

  5. 大白话简单工厂模式 (Simple Factory Pattern)

    大白话简单工厂模式 (Simple Factory Pattern) 从买车经历说起 毕业两年,码农张小两口无法忍受挤公交,凌晨起床抢火车票的痛苦,遂计划买车.逛了多家4S店,最终定下日产某车型的轿车 ...

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

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

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

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

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

    简单工厂模式概述 定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类 在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又被 ...

  9. C#设计模式-1简单工厂模式Simple Factory)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 简单的工 ...

随机推荐

  1. 写了一个jquery的 弹出层插件。

    下载地址:http://pan.baidu.com/s/1eQ26CMm ps:ajax加载做的,要有环境才能正常运行哦! //这是一个以ajax加载显示弹出层插件  参数(option): widt ...

  2. Js点餐加减数量

    <button class="add-on" onclick="chgNum(1,'del')" ><i class="icon-m ...

  3. WEB编码事项

    标准 WEB开发标准是一系列标准的集合, 包含HTML结构标准.CSS表现标准.JS行为标准.代码标准.标准测试. 目标 WEB开发流程统一标准化,实现页面结构.表现.行为适当分离,提高页面易维护性, ...

  4. Gnuradio 实验二

    今天根据教程做了实验二 要到了两个新的模块 一个是 FFT SINK, 其作用是按频谱输出信号. 另外一个就是 GUI Notebook ,起作用就是可以将SCOPE SINK 和 FFT SINK ...

  5. HDU-1799(组合递推公式)

    HDOJ-1799 - Fighting_Dream M - 暴力求解.打表 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Forma ...

  6. decimal类型数据如何保留两位小数

    日常开发中,decimal作为货币类型,经常会处理保留两位小数的问题. 本站整理两种,decimal类型保留两位小数的方法. 第一种: decimal d = 46.28111m;string res ...

  7. 实验一:C语言实现DES加解密算法

    计算程序执行10万次需要的时间: 总共需要175秒 加解密一次的时间小于:0.00175秒 纯计算加解密的时间会更短 去除IO操作后的时间 也就是说加解密一次的时间为0.07毫秒 /*-------- ...

  8. Python——学习笔记

    list  ['','',''] 类似PHP数组   可以修改 tuple  ('','')  不能修改其中的元素 切片 list[int 开始: int 结束: int 间隔=1] 字符串也可以看成 ...

  9. poj 2777Count Color

    http://poj.org/problem?id=2777 注意:a可能比b大 #include <cstdio> #include <cstring> #include & ...

  10. mysqldump 一些参数体验

    mysqldump -uroot -p'xxx' -R --single-transaction --master-data=2 zjzc>$TODAY_DIR/zjzc/zjzc_${TODA ...