我們以做一個計算器為例,給大家介紹簡單工廠的應用:
效果:

這裡我們使用 繼承 ,虛方法, 簡單工廠的設計模式來完成
首先,我們除了搭好窗體外,我們應該把我們的一些類准備好:
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.方法是有參的