设计模式之—简单工厂模式<Simple Factory Pattern >
简单工厂模式结构图:
简单工厂模式以简单的加减乘除运算为例:
运算符类(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 >的更多相关文章
- 【设计模式】简单工厂模式 Simple Factory Pattern
简单工厂模式Simple Factory Pattern[Simple Factory Pattern]是设计模式里最简单的一个模式,又叫静态工厂模式[Static Factory Pattern], ...
- 设计模式之简单工厂模式(Simple Factory Pattern)
一.简单工厂模式的由来 所有设计模式都是为解决某类问题而产生的,那么简单工厂模式是为解决什么问题呢?我们假设有以下业务场景: 在一个学生选课系统中,文科生用户选课时,我们要获得文科生的所有课程列表:理 ...
- 【UE4 设计模式】简单工厂模式 Simple Factory Pattern
概述 描述 又称为静态工厂方法 一般使用静态方法,根据参数的不同创建不同类的实例 套路 创建抽象产品类 : 创建具体产品类,继承抽象产品类: 创建工厂类,通过静态方法根据传入不同参数从而创建不同具体产 ...
- Golang设计模式—简单工厂模式(Simple Factory Pattern)
Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...
- 大白话简单工厂模式 (Simple Factory Pattern)
大白话简单工厂模式 (Simple Factory Pattern) 从买车经历说起 毕业两年,码农张小两口无法忍受挤公交,凌晨起床抢火车票的痛苦,遂计划买车.逛了多家4S店,最终定下日产某车型的轿车 ...
- 设计模式之简单工厂模式Simple Factory(四创建型)
工厂模式简介. 工厂模式专门负责将大量有共同接口的类实例化 工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式有三种形态: 1.简单工厂模式Simple Factory ...
- Net设计模式实例之简单工厂模式(Simple Factory Pattern)
一.简单工厂模式简介(Bref Introduction) 简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类, ...
- 简单工厂模式(Simple Factory Pattern)
简单工厂模式概述 定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类 在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又被 ...
- C#设计模式-1简单工厂模式Simple Factory)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 简单的工 ...
随机推荐
- TP开发小技巧
TP开发小技巧原文地址http://wp.chenyuanzhao.com/wp/2016/07/23/tp%E5%BC%80%E5%8F%91%E5%B0%8F%E6%8A%80%E5%B7%A7/ ...
- JS中 submit提交与Form表单里的onsubmit的调用问题?
最近在开发中遇到了表单提交前验证的问题,用一个普通的button按钮代替submit按钮,在提交前触发这个button的onclick事件,在其事件中触发form的submit事件.问题出现了: &l ...
- php中字符串编码
php中抓取网页拼接url的时候经常需要进行编码,这时候就用到两个函数 mb_detect_encoding — 检测字符的编码. mb_convert_encoding — 转换字符的编码 < ...
- php错误级别设置
在php.ini中可以设置服务器对错误的报警级别.在默认情况下,php将报告除了通知之外的所有错误. 错误报告级别是通过一些预定义的常量来设置的, 语法 int error_reporting ( [ ...
- .net FrameWork4.0安装未成功
安装了一上午的.net framework 4.0,各种失败,查了好多答案,各种不靠谱,最后终于找到答案了 和Windows Update有关系,给目录名重命名一下再次安装,即安装成功了! 下载地址: ...
- Instruments 使用指南
Instruments 用户指南 http://cdn.cocimg.com/bbs/attachment/Fid_6/6_24457_90eabb4ed5b3863.pdf 原著:Apple Inc ...
- Solr4.8.0源码分析(15) 之 SolrCloud索引深入(2)
Solr4.8.0源码分析(15) 之 SolrCloud索引深入(2) 上一节主要介绍了SolrCloud分布式索引的整体流程图以及索引链的实现,那么本节开始将分别介绍三个索引过程即LogUpdat ...
- 转:Hprose for php(三)——客户端
文章来自于:http://blog.csdn.net/half1/article/details/21329785 本文将介绍Hprose for php客户端的更多细节. 1.直接通过远程方法名进行 ...
- N个元素的集合划分成互斥的两个子集的数目
前面这是寒假听马士兵老师讲的时候积累的语录.......... 1.php是水果刀,java是菜刀,刀法比较多,一年的和三年的区别很大. 2.nanicat连接mysql出现10061是服务没开启,却 ...
- android.support.design.widget.AppBarLayout 在android5.0+底部显示空白条问题
在最外层使用 RelativeLayout作为根节点,同时设置 android:fitsSystemWindows="true"问题解决. <?xml version=&qu ...