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

[ASP.net教程]两种设计模式==“简单工厂”


我们以做一个计算器为例,给大家介绍简单工厂的应用:

效果:

这里我们使用 继承 ,虚方法, 简单工厂的设计模式来完成

首先,我们除了搭好窗体外,我们应该把我们的一些类准备好:

1.计算的父类Calculation

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 计算器_简单工厂_{  //父类(虚) 计算类  public abstract class Calculation  {    //第一个操作数    public double Numleft { get; set; }    //第二个操作数    public double NumRight { get; set; }    //运算符    public string Operator { get; set; }    //虚方法    public abstract double Cal();  }}

2.然后就是,加,减,乘,除 的子类

  01.加法类 Add 

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 计算器_简单工厂_{  //加法  public class Add:Calculation  {    public override double Cal()    {      double result = Numleft + NumRight;      return result;    }  }}

 02.减法类 Sub

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 计算器_简单工厂_{  //减法  public class Sub:Calculation  {    public override double Cal()    {      double result = Numleft - NumRight;      return result;    }  }}

 03.乘法类 Mul

  

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 计算器_简单工厂_{  //减法类  public class Mul:Calculation  {    public override double Cal()    {      double result = Numleft * NumRight;      return result;    }  }}

  04.除法类 Div

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 计算器_简单工厂_{  //除法类  public class Div:Calculation  {    public override double Cal()    {      //除法中 除数是不能为0      if (NumRight==0)      {        throw new Exception("除数不能为0");      }      double result = Numleft / NumRight;      return result;    }  }}

3.最后就是准备 “简单工厂” 的类

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 计算器_简单工厂_{  //工作类  public class Factory  {    public static Calculation Cal(string ope)    {      //初始化父类对象      Calculation calculation = null;      //根据传来的运算符实例化      switch (ope)      {        case"+":          calculation = new Add();          break;        case "-":          calculation = new Sub();          break;        case "*":          calculation = new Mul();          break;        case "/":          calculation = new Div();          break;             }      //返回实例化的对象      return calculation;    }  }}

4.一切准备好后,我们来看看在窗体中是如何用的呐! 

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace 计算器_简单工厂_{  public partial class FrmMain : Form  {    public FrmMain()    {      InitializeComponent();    }    private void btnCal_Click(object sender, EventArgs e)    {      //外层try作用:判断输入的操作数是否正确      try      {        //分别获得要计算的值        double num1 = Convert.ToDouble(txtLift.Text);        double num2 = Convert.ToDouble(txtRight.Text);        string ope = cmbstring.Text;        //把获得的运算符传达“简单工厂”        Calculation cal = Factory.Cal(ope);        double result = 0;        //赋值(最会忘记)        cal.Numleft = num1;        cal.NumRight = num2;        //内层try作用:判断当除法时除数是否为0        try        {          //知道需求,开始进行相应工作          result = cal.Cal();        }        catch (Exception ex)        {                    MessageBox.Show(ex.Message);        }        //显示结果        label1.Text = result.ToString();      }      catch (Exception ex)      {        //如果输入不正确,则系统会提示“输入字符串的格式不正确”        MessageBox.Show(ex.Message);              }                    }  }}

 

我们来总结一下我们“简单工厂”类的一些注意点吧:

 1.方法是静态的,调用的时候不需要实例化

 2.方法的返回值是父类 类型

 3.方法是有参的