此处示例为一个简易计算器工厂模式的实现.
创建类库,名为CalcLib,我把计算功能全部放在这个类库中.
首先,创建一个抽象的计算器算法父类,如下:

  1. /// <summary>
  2. /// 计算器算法父类
  3. /// </summary>
  4. public abstract class Calculator
  5. {
  6. public Calculator()
  7. {
  8. }
  9. //给子类的参数
  10. public Calculator(double n1, double n2)
  11. {
  12. this.Number1 = n1;
  13. this.Number2 = n2;
  14. }
  15. public double Number1 { get; set; }
  16. public double Number2 { get; set; }
  17. /// <summary>
  18. /// 抽象计算方法
  19. /// </summary>
  20. /// <returns>result</returns>
  21. public abstract double Compute();
  22. }

父类创建完毕后,我们在子类来实现具体的加减乘除
加法类:

  1. /// <summary>
  2. /// 加法
  3. /// </summary>
  4. public class CalAdd:Calculator
  5. {
  6. public CalAdd(double n1, double n2)
  7. :base(n1,n2)
  8. {
  9. }
  10. public override double Compute()
  11. {
  12. return Number1 + Number2;
  13. }
  14. }

减法类:

  1. /// <summary>
  2. /// 减法
  3. /// </summary>
  4. public class CalSub:Calculator
  5. {
  6. public CalSub(double n1, double n2)
  7. :base(n1,n2)
  8. {
  9. }
  10. public override double Compute()
  11. {
  12. return Number1 - Number2;
  13. }
  14. }

乘法类:

  1. /// <summary>
  2. /// 乘法
  3. /// </summary>
  4. public class CalMul:Calculator
  5. {
  6. public CalMul(double n1, double n2)
  7. :base(n1,n2)
  8. {
  9. }
  10. public override double Compute()
  11. {
  12. return Number1 * Number2;
  13. }
  14. }

除法类:

  1. /// <summary>
  2. /// 除法
  3. /// </summary>
  4. public class CalDiv : Calculator
  5. {
  6. public CalDiv(double n1, double n2)
  7. : base(n1, n2)
  8. {
  9. }
  10. public override double Compute()
  11. {
  12. return Number1 / Number2;
  13. }
  14. }

OK,需要的计算方法都创建完毕了,现在,我们来创建主程序,这里呢我创建一个控制台程序,名为MyCalculator,然后呢在Program类中添加一个静态的计算工厂方法。

  1. /// <summary>
  2. /// 计算工厂
  3. /// </summary>
  4. /// <param name="n1">操作数1</param>
  5. /// <param name="op">符号</param>
  6. /// <param name="n2">操作数2</param>
  7. /// <returns>计算结果</returns>
  8. static Calculator Cal(double n1, string op, double n2)
  9. {
  10. Calculator cal = null;
  11. switch (op)
  12. {
  13. case "+":
  14. cal = new CalAdd(n1, n2);
  15. break;
  16. case "-":
  17. cal = new CalSub(n1, n2);
  18. break;
  19. case "*":
  20. cal = new CalMul(n1, n2);
  21. break;
  22. case "/":
  23. cal = new CalDiv(n1, n2);
  24. break;
  25. default:
  26. break;
  27. }
  28. return cal;
  29. }

最后呢我在Main方法中添加了以下代码:

  1. static void Main(string[] args)
  2. {
  3. Console.Title = "简易计算器";
  4. Console.WindowWidth = 37;
  5. Console.WindowHeight = 10;
  6. Console.ForegroundColor = ConsoleColor.Green;
  7. while (true)
  8. {
  9. try
  10. {
  11. Console.Clear();
  12. Console.WriteLine("请输入操作数1:");
  13. double n1 = Convert.ToDouble(Console.ReadLine());
  14. Console.WriteLine("请输入操作符:");
  15. string op = Console.ReadLine();
  16. Console.WriteLine("请输入操作数2:");
  17. double n2 = Convert.ToDouble(Console.ReadLine());
  18. Calculator cal = Cal(n1, op, n2);
  19. if (cal != null)
  20. Console.WriteLine("计算结果为:{0}", cal.Compute());
  21. Console.WriteLine("再次按回车继续计算...");
  22. Console.ReadLine();
  23. }
  24. catch { break; }
  25. }
  26. }

OK,一个简单的工厂模式实现就完成了,用工厂模式首先呢要有一个公用的抽象意义,然后再来使用,新功能无需更改任何代码,只需要新增一个类,基础父类,然后实现你要得功能就可以了,有点类似于浏览器和插件。

C#工厂模式代码实例的更多相关文章

  1. php设计模式之简单工厂模式代码实例

    <?php header("Content-type:text/html;charset=utf-8"); /** * 共同接口 */ interface db { func ...

  2. java 抽象工厂模式简单实例

    抽象工厂模式:提供一个创建一系列的相关的或者依赖的对象的接口,无需指定它们的具体实现类,具体的时间分别在子类工厂中产生. 类似于工厂模式:隔离了具体类的生产实现,使得替换具体的工厂实现类很容易.包含有 ...

  3. php工厂模式的实例

    * 单例模式:用于创建单一类型的唯一实例对象 * 工厂模式:用于创建多种类型的多个实例对象 //声明形状类 class Shape { //声明静态方法create,根据容器形状不同,创建不同图形类的 ...

  4. JavaScript工厂模式代码

    function createPerson(name,age,job){ var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayNam ...

  5. C# 设计模式之工厂模式(一)

    写在前面,PS一句:笔记专用,轻拍勿喷,看的不爽绕路前行即可. 一.举栗说明 1.剧情:某银行财务有三位员工,分别为A.B.C三人,主要任务就是去银行取钱,如下: class EmloyeeA: { ...

  6. JAVA设计模式之工厂模式

    工厂模式概念: 实例化对象,用工厂方法代替new操作 工厂模式包括工厂方法模式和抽象工厂模式 抽象工厂模式是工厂方法模式的扩展 工厂模式的意图: 定义一个接口来创建对象,但是让子类来决定哪些类需要被实 ...

  7. JS中的工厂模式

    .一个栗子: var BicycleShop = function(){}; BicycleShop.prototype = { sellBicycle : function( model ){ va ...

  8. 学习:java设计模式—工厂模式

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Facto ...

  9. Java设计模式02:常用设计模式之工厂模式(创建型模式)

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的.  工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Fact ...

随机推荐

  1. C语言之可重入函数 && 不可重入函数

    可重入函数 在 实时系统的设计中,经常会出现多个任务调用同一个函数的情况.如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任 务调用这个函数的数据,从而导致不可预料 ...

  2. web_api vs2015 新加标题无法打开

    HomeController 去掉特性[Authorize]

  3. OD: Heap Exploit : DWORD Shooting & Opcode Injecting

    堆块分配时的任意地址写入攻击原理 堆管理系统的三类操作:分配.释放.合并,归根到底都是对堆块链表的修改.如果能伪造链表结点的指针,那么在链表装卸的过程中就有可能获得读写内存的机会.堆溢出利用的精髓就是 ...

  4. SignalR2.0开发实例之——设置时间、后台其他地方使用集线器、使用自己的连接ID

    一.连接的生命周期设置: 如下: // 该值表示连接在超时之前保持打开状态的时间长度. //默认为110秒 GlobalHost.Configuration.ConnectionTimeout = T ...

  5. web标准(复习)--7 横向导航菜单

    今天我们开始学习html列表,包含以下内容和知识点: 横向列表菜单 用图片美化的横向导航 css Sprites 一.横向列表菜单前边学习过纵向导航菜单,又学习了float属性,那么要实现横向导航菜单 ...

  6. 3步学会用gulp

    1.安装gulp 安装gulp到全局:npm install -g gulp 安装gulp到某个项目:npm install --save gulp 注意:请先安装nodejs(自带npm) 2.创建 ...

  7. 项目中redis类似MVC的使用

  8. python list内容拷贝方法

    先看如下代码: x = ['a','b','z'] y = x print y y[0] = 'w' print x,y 结果输出: >>> ['a', 'b', 'z'] #y l ...

  9. setf

    independent flags boolalpha read/write bool elements as alphabetic strings (true and false). showbas ...

  10. HBase笔记--安装及启动过程中的问题

    1.使用hbase shell的时候运行命令执行失败 例如:在shell下执行 status,失败. 可能的原因:节点之间的时间差距过大 解决方法调整两个节点的时间,使二者一致,这里用了个比较笨的方法 ...