Elijah

治愈系代码研究基地
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[传智播客学习日记]简单工厂模式计算器案例

Posted on 2011-10-25 20:29  Elijah  阅读(394)  评论(0编辑  收藏  举报

这周学习了最基本的设计模式——简单工厂模式,指的是通过一个返回值为父类的静态函数,取得一个子类的对象,以实现“父类 Obj = new 子类()”方式的多态。 以下是一个简易计算器,每当扩展一个运算方法时,只需要增加一个类就可以了。 (至于里面恶心的switch块,日后再研究怎么去掉)

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace 工厂模式计算器
7 {
8 public abstract class Cal
9 {
10 private double number1;
11
12 public double Number1
13 {
14 get { return number1; }
15 set { number1 = value; }
16 }
17 private double number2;
18
19 public double Number2
20 {
21 get { return number2; }
22 set { number2 = value; }
23 }
24 public abstract double JiSuan();
25 }
26
27 class Add : Cal
28 {
29 public override double JiSuan()
30 {
31 return Number1 + Number2;
32 }
33 }
34 class Sub : Cal
35 {
36 public override double JiSuan()
37 {
38 return Number1 - Number2;
39 }
40 }
41 class Mul : Cal
42 {
43 public override double JiSuan()
44 {
45 return Number1 * Number2;
46 }
47 }
48
49 class Program
50 {
51 //简单工厂模式
52 static Cal CreateCal(string caoZuoFu)
53 {
54 Cal cal = null;
55 switch (caoZuoFu)
56 {
57 case"+":
58 cal = new Add();
59 break;
60 case "-":
61 cal = new Sub();
62 break;
63 case "*":
64 cal = new Mul();
65 break;
66 }
67 return cal;
68 }
69
70 static void Main(string[] args)
71 {
72 Console.WriteLine("请输入操作数1:");
73 double d1 = Convert.ToDouble(Console.ReadLine());
74
75 Console.WriteLine("请输入操作数2:");
76 double d2 = Convert.ToDouble(Console.ReadLine());
77
78 Console.WriteLine("请输入运算符:");
79 string caoZuoFu = Console.ReadLine();
80
81 Cal myCal = CreateCal(caoZuoFu);
82
83 myCal.Number1 = d1;
84 myCal.Number2 = d2;
85
86 Console.WriteLine("结果是:{0}",myCal.JiSuan());
87 Console.ReadKey();
88 }
89 }
90 }