摘要:體驗工廠模式
本文是以加減乘除來做一個範例,透過工廠模式來提供使用那一種運算方式來計算數字,達到數字與運算分離的功能,以便往後維護,擴充。
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
}
/// <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
}
建立工廠的運算類別
/// <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;
}
}
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
}
/// <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
}
範例實作:
<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();
}

