工厂模式 与表驱动法的应用理解

来源:互联网 发布:iphone6屏幕解锁软件 编辑:程序博客网 时间:2024/05/20 17:08

写一个很简单的程序 ,要求:输入加减乘除的符号 就输出结果2 与 1 的结果,其实原题是写计算器的程序 为了简单完成题目 重在理解那种编程思维

我认为自己写的精彩的代码是 
为了让程序扩展性高 一般使用
工厂模式
代码 

 abstract  class MathOperation

    {

     public abstract void Exection();

      

    }

 class Add : MathOperation

    {

  

     public override void Exection()

     {

         Console.WriteLine("加法");

     }

    }

 class Subtract : MathOperation

 {

   

     public override void Exection()

     {

         Console.WriteLine("减法");

     }

 }
//下面就是工厂了   interface IMathFactory 

 {

     MathOperation CreateOperate();

      

 

 }
 class AddFactory:IMathFactory

 {

     public MathOperation CreateOperate()

     {

         return new Add();

     }

 }

 

 class SubtractFactory : IMathFactory

 {

     public MathOperation CreateOperate()

     {

         return new Subtract();

     }

 } 

//一般使用工厂模式没有下面这步 这里是使用表驱动方法了 为了在真实情况下界面修改对程序修改最小

  class MathFactory 

  {
        Dictionary<string, IMathFactory> dic = new Dictionary<string, IMathFactory>(); 
    public MathOperation CreateOperate(string OpName)

      {

        //当扩展功能时只要修改这里代码 就是dic 增加其他的 数学运算类

          dic.Add("+",new AddFactory());

          dic.Add("-",new SubtractFactory());

 

          IMathFactory mafa = dic[OpName];

          return mafa.CreateOperate();

      }

  }


掉用代码:

            MathFactory mmm = new MathFactory();

            MathOperation mo = mmm.CreateOperate(Console.ReadKey().KeyChar.ToString());

            mo.Exection();
Console.ReadKey() 模拟了界面行为  
 


 不过下面代码好像更加干净 
仅仅就是用了 委托和表驱动法 
 扩展功能就是增加一个函数 而不用写增加类了,工厂模式要增加功能 就必须增加很多类

 class Maths

 {

     int a; int b;

     

     public delegate int Mehtod(int aaa, int bbb);

 

     Dictionary<string, Mehtod> dic = new Dictionary<string, Mehtod>();

     public  int GetMathResult(int a, int b, string OpName)

     {

         dic.Add("+", Add1);

         dic.Add("-", Subtract1);

         return dic[OpName](a, b);

     }

      int Add1(int a, int b)

     {

         return a + b;

     }

       int Subtract1(int a, int b)

     {

         return a - b;

     }

 

 }
调用代码

         Maths maths = new Maths();

          int Result= maths.GetMathResult(2, 1, Console.ReadKey().KeyChar.ToString());

           Console.WriteLine(Result); 

用可扩展的 分离界面的

 

0 0