设计模式--简单工厂模式之计算器
2016-05-05 15:31
302 查看
主要利用工厂模式来实现了一个计算器,将加减乘除操作分离了开来,实现了低耦合的目标。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 设计模式___计算器 { public class Operation { double numA; public double NumA { get { return numA; } set { numA = value; } } double numB; public double NumB { get { return numB; } set { numB = value; } } public virtual string GetResult()//将这个方法写成虚拟的,方便下面的加减乘除按照各自的需要在对方法进行重写即可。 { return "error"; } } class OperationAdd : Operation { public override string GetResult()//重写GetResult()方法,实现两数想加的功能。 { return (NumA + NumB).ToString(); } } class OperationSub : Operation { public override string GetResult()//重写了GetResult()方法,实现了两数相减的功能。 { return (NumA - NumB).ToString(); } } class OperationChen : Operation { public override string GetResult()//重写GetResult()方法,实现了两数相乘的目标。 { double result = NumA * NumB; return result.ToString(); } } class OperationChu : Operation { public override string GetResult()//重写GetResult()方法,实现两数相除的目标。 { double result; if (NumB == 0)//注意判定被除数是否为零的问题。 { return "除数不能为空!"; } else { result = NumA / NumB; return result.ToString(); } } } public class OperationFactory { public static Operation GetOperation(string str)//写了一个静态方法,实现了根据不同的运算符来构造不同的运算对象。 { Operation p = new Operation();//由于Operation为基类,所以它可以接受其他的子类。 switch (str) { case "+": p = new OperationAdd(); break; case "-": p = new OperationSub(); break; case "*": p = new OperationChen(); break; case "/": p = new OperationChu(); break; } return p; } } class Program { static void Main(string[] args) { int numA, numB; string C; string result = null; Console.WriteLine("请输入第一个数:\n"); numA = int.Parse(Console.ReadLine()); Console.WriteLine("请输入操作符:\n"); C = Console.ReadLine(); Console.WriteLine("请输入第二个数:\n"); numB = int.Parse(Console.ReadLine()); Operation p = OperationFactory.GetOperation(C); p.NumA = numA; p.NumB = numB; Console.WriteLine("结果为:\n"); Console.WriteLine(p.GetResult()); Console.ReadLine(); } } }
相关文章推荐
- 推荐IOS开发3个工具:Homebrew、TestFight、Crashlytics-备
- iOS开发工具——统计Crash的工具Crashlytics-备用
- jdk动态代理接口
- 2016.4.25面经_海勤
- 为什么「margin:auto」可以让块级元素水平居中?
- 213 - Message Decoding
- Android Audio
- 服务端出现大量close_wait问题
- 高光谱ENVI使用教程之监督分类参数说明
- 轮播图,使用简单,代码里一句话搞定,多个参数可自定义修改
- Linq 读取Xml 数据
- 深复制的体验
- iOS开发:"此证书的签发者无效"解决方法
- extjs proxy学习
- 使用SNMP编辑(添加/删除/修改)ARP表
- Pinctrl基础简介
- Java并发编程:Lock
- iOS in-app purchase详解
- 堆内存和栈内存详解(转载)
- idea中类注释和方法注释模板添加方法