我們以做一個計算器為例,給大家介紹簡單工廠的應用:
效果:
這裡我們使用 繼承 ,虛方法, 簡單工廠的設計模式來完成
首先,我們除了搭好窗體外,我們應該把我們的一些類准備好:
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.方法是有參的