你的位置:首页 > ASP.net教程

[ASP.net教程]六、创建型模式之简单工厂模式


简单工厂模式:

    需要增加运算形式时只需要增加运算子类,同时修改简单工厂中的switch增加分支即可,这样客户端调用代码基本不动。

image

  // 运算类  public class Operation  {    private double _numberA = 0;    private double _numberB = 0;        // 数字A属性   
    public double NumberA    {      get      {        return _numberA;      }      set      {        _numberA = value;      }    }    // 数字B属性    public double NumberB    {      get      {        return _numberB;      }      set      {        _numberB = value;      }    }    // 得到运算结果    public virtual double getResult()    {      double result = 0;       return result;    }      }

// 加法类  class OperationAdd : Operation  {    public override double getResult()    {      double result = 0;       result = NumberA + NumberB;      return result;    }  }  // 减法类  class OperationSub : Operation  {    public override double getResult()    {      double result = 0;      result = NumberA - NumberB;      return result;    }  }  // 乘法类  class OperationMul : Operation  {    public override double getResult()    {      double result = 0;      result = NumberA * NumberB;      return result;    }  }  // 除法类  class OperationDiv : Operation  {    public override double getResult()    {      double result = 0;      if (NumberB==0)        throw new Exception("除数不能为0。");      result = NumberA / NumberB;      return result;    }  }

  // 简单类工厂  class OperationFactory  {    public static Operation createOperate(string operate)    {      Operation oper = null;      switch (operate)      {        case "+":          {            oper = new OperationAdd();            break;          }        case "-":          {            oper = new OperationSub();            break;          }        case "*":          {            oper = new OperationMul();            break;          }        case "/":          {            oper = new OperationDiv();            break;          }      }      return oper;    }  }

//控制台调用static void Main(string[] args)    {      try      {        Console.Write("请输入数字A:");        string strNumberA = Console.ReadLine();        Console.Write("请选择运算符号(+、-、*、/):");        string strOperate = Console.ReadLine();        Console.Write("请输入数字B:");        string strNumberB = Console.ReadLine();        string strResult = "";        Operation oper;                     //声明运算类        oper = OperationFactory.createOperate(strOperate);   //根据运算符调用工厂类初始化相应运算子类        oper.NumberA = Convert.ToDouble(strNumberA);        oper.NumberB = Convert.ToDouble(strNumberB);        strResult = oper.GetResult().ToString();        Console.WriteLine("结果是:" + strResult);        Console.ReadLine();      }      catch (Exception ex)      {        Console.WriteLine("您的输入有错:" + ex.Message);      }    }