简单工厂模式结构图:

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

运算符类(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. Java简介(1)

    起源 略. 组成 Java由四方面组成: 1.Java编程语言 2.Java文件格式 3.Java虚拟机(JVM) 4.Java应用程序接口(Java api) 体系 JavaSE , JavaEE, ...

  2. python密码处理(可用于生产模式)

    import os from hashlib import sha256 from hmac import HMAC def encrypt_password(password, salt=None) ...

  3. 【转】关于TP3.2 验证码不显示的问题

    在调用验证码之前加上 ob_clean(); 不显示验证码的代码: public function verify(){                $verify = new \Think\Veri ...

  4. linux指令tips

    1.调用命令使用应用名称免路径.   例如在路径 /usr/local/mobile/php538 建立了php应用,在调用php命令的时候,我们需要加路径访问 如 /usr/local/mobile ...

  5. C语言基础学习基本数据类型-浮点型

    float和double 加了小数点的数都是浮点数.C语言有两种书写浮点数的方式,一种是使用常用的标准小数点表示法,如下: 0.00056 8.0 1.23 第二种表示浮点值叫做E表示法.下面是一些例 ...

  6. storm接入metaq时类不兼容错误 无法初始化MonitorLog

    在实际的项目中,需要storm从metaq中读取数据,一开始就有日志问题,查到是storm/lib中的log4j-over-slf4j和slf4j-api.jar包的不兼容导致的,这些日志包使用时必须 ...

  7. segv & mini coredump

    1. mini coredump    a. segv      http://zh.scribd.com/doc/3726406/Crash-N-Burn-Writing-Linux-applica ...

  8. 通过示波器分析TypeB卡通讯数据

    这几天,使用NFC芯片模拟了一张TypeB的cpu卡,在调试过程中,因为要检查射频性能,所以用示波器抓取了RFID读卡器和TypeB CPU卡之间的通讯数据.READER发送的数据位106K ASK调 ...

  9. Facebook 开源三款图像识别人工智能软件

    Facebook今天开源了三款人工智能图像分割(Image Segmentation)软件,分别是DeepMask.SharpMask和MultiPathNet,三款工具相互配合完成一个完整的图像识别 ...

  10. mysql 主从 配置和同步管理

    首先呢,需要有两个mysql服务器.如果做测试的话可以在同一台机器上装两个mysql服务程序,注意要两个运行程序的端口不能一样.我用的是一个是默认的3306,从服务器用的是3307端口. 在主服务创建 ...