摘要:體驗工廠模式
本文是以加減乘除來做一個範例,透過工廠模式來提供使用那一種運算方式來計算數字,達到數字與運算分離的功能,以便往後維護,擴充。
01 /// <summary>
02 /// 運算
03 /// </summary>
04 public class Operation
05 {
06 private double _numberA = 0;
07 private double _numberB = 0;
08
09 /// <summary>
10 /// 數字A
11 /// </summary>
12 public double NumberA
13 {
14 get { return _numberA; }
15 set { _numberA = value; }
16 }
17 /// <summary>
18 /// 數字B
19 /// </summary>
20 public double NumberB
21 {
22 get { return _numberB; }
23 set { _numberB = value; }
24 }
25 /// <summary>
26 /// 運算結果
27 /// </summary>
28 /// <returns></returns>
29 public virtual double GetResult()
30 {
31 double result = 0;
32 return result;
33 }
34 }
02 /// 運算
03 /// </summary>
04 public class Operation
05 {
06 private double _numberA = 0;
07 private double _numberB = 0;
08
09 /// <summary>
10 /// 數字A
11 /// </summary>
12 public double NumberA
13 {
14 get { return _numberA; }
15 set { _numberA = value; }
16 }
17 /// <summary>
18 /// 數字B
19 /// </summary>
20 public double NumberB
21 {
22 get { return _numberB; }
23 set { _numberB = value; }
24 }
25 /// <summary>
26 /// 運算結果
27 /// </summary>
28 /// <returns></returns>
29 public virtual double GetResult()
30 {
31 double result = 0;
32 return result;
33 }
34 }
建立工廠的運算類別
/// <summary>
/// 加法運算
/// </summary>
public class OperationAdd : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA + NumberB;
return result;
}
}
/// <summary>
/// 減法運算
/// </summary>
public class OperationSub : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA - NumberB;
return result;
}
}
/// <summary>
/// 乘法運算
/// </summary>
public class OperationMul:Operation
{
public override double GetResult()
{
double result;
result = NumberA * NumberB;
return result;
}
}
/// <summary>
/// 除法運算
/// </summary>
public class OperationDiv:Operation
{
public override double GetResult()
{
double result=0;
if (NumberB == 0)
throw new Exception("除數不能為0");
result = NumberA / NumberB;
return result;
}
}
/// 加法運算
/// </summary>
public class OperationAdd : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA + NumberB;
return result;
}
}
/// <summary>
/// 減法運算
/// </summary>
public class OperationSub : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA - NumberB;
return result;
}
}
/// <summary>
/// 乘法運算
/// </summary>
public class OperationMul:Operation
{
public override double GetResult()
{
double result;
result = NumberA * NumberB;
return result;
}
}
/// <summary>
/// 除法運算
/// </summary>
public class OperationDiv:Operation
{
public override double GetResult()
{
double result=0;
if (NumberB == 0)
throw new Exception("除數不能為0");
result = NumberA / NumberB;
return result;
}
}
01 /// <summary>
02 /// 運算工廠
03 /// </summary>
04 public class OperationFactory
05 {
06 //建立工廠
07 public static Operation createOperate(string operate)
08 {
09 Operation oper = null;
10 switch (operate)
11 {
12 case "+":
13 {
14 oper = new OperationAdd(); break;
15 }
16 case "-":
17 {
18 oper = new OperationSub(); break;
19 }
20 case "*":
21 {
22 oper = new OperationMul(); break;
23 }
24 case "/":
25 {
26 oper = new OperationDiv(); break;
27 }
28 }
29 return oper;
30 }
31 }
02 /// 運算工廠
03 /// </summary>
04 public class OperationFactory
05 {
06 //建立工廠
07 public static Operation createOperate(string operate)
08 {
09 Operation oper = null;
10 switch (operate)
11 {
12 case "+":
13 {
14 oper = new OperationAdd(); break;
15 }
16 case "-":
17 {
18 oper = new OperationSub(); break;
19 }
20 case "*":
21 {
22 oper = new OperationMul(); break;
23 }
24 case "/":
25 {
26 oper = new OperationDiv(); break;
27 }
28 }
29 return oper;
30 }
31 }
範例實作:
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtNum1" runat="server"></asp:TextBox>
<asp:DropDownList ID="ddrOper" runat="server">
<asp:ListItem>+</asp:ListItem>
<asp:ListItem>-</asp:ListItem>
<asp:ListItem>*</asp:ListItem>
<asp:ListItem>/</asp:ListItem>
</asp:DropDownList>
<asp:TextBox ID="txtNum2" runat="server"></asp:TextBox>
<asp:Button ID="btSum" runat="server" onclick="btSum_Click" Text="計算" />
<br />
<asp:Label ID="lbTotal" runat="server"></asp:Label>
</div>
</form>
</body>
protected void btSum_Click(object sender, EventArgs e)
{
Operation oper = OperationFactory.createOperate(ddrOper.SelectedValue);
oper.NumberA = double.Parse(txtNum1.Text);
oper.NumberB = double.Parse(txtNum2.Text);
lbTotal.Text = oper.GetResult().ToString();
}
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtNum1" runat="server"></asp:TextBox>
<asp:DropDownList ID="ddrOper" runat="server">
<asp:ListItem>+</asp:ListItem>
<asp:ListItem>-</asp:ListItem>
<asp:ListItem>*</asp:ListItem>
<asp:ListItem>/</asp:ListItem>
</asp:DropDownList>
<asp:TextBox ID="txtNum2" runat="server"></asp:TextBox>
<asp:Button ID="btSum" runat="server" onclick="btSum_Click" Text="計算" />
<br />
<asp:Label ID="lbTotal" runat="server"></asp:Label>
</div>
</form>
</body>
protected void btSum_Click(object sender, EventArgs e)
{
Operation oper = OperationFactory.createOperate(ddrOper.SelectedValue);
oper.NumberA = double.Parse(txtNum1.Text);
oper.NumberB = double.Parse(txtNum2.Text);
lbTotal.Text = oper.GetResult().ToString();
}