主要利用工廠模式來實現了一個計算器,將加減乘除操作分離了開來,實現了低耦合的目標。 ...
主要利用工廠模式來實現了一個計算器,將加減乘除操作分離了開來,實現了低耦合的目標。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 設計模式___計算器
{
public class Operation
{
double numA;
public double NumA
{
get
{
return numA;
}
set
{
numA = value;
}
}
double numB;
public double NumB
{
get
{
return numB;
}
set
{
numB = value;
}
}
public virtual string GetResult()//將這個方法寫成虛擬的,方便下麵的加減乘除按照各自的需要在對方法進行重寫即可。
{
return "error";
}
}
class OperationAdd : Operation
{
public override string GetResult()//重寫GetResult()方法,實現兩數想加的功能。
{
return (NumA + NumB).ToString();
}
}
class OperationSub : Operation
{
public override string GetResult()//重寫了GetResult()方法,實現了兩數相減的功能。
{
return (NumA - NumB).ToString();
}
}
class OperationChen : Operation
{
public override string GetResult()//重寫GetResult()方法,實現了兩數相乘的目標。
{
double result = NumA * NumB;
return result.ToString();
}
}
class OperationChu : Operation
{
public override string GetResult()//重寫GetResult()方法,實現兩數相除的目標。
{
double result;
if (NumB == 0)//註意判定被除數是否為零的問題。
{
return "除數不能為空!";
}
else
{
result = NumA / NumB;
return result.ToString();
}
}
}
public class OperationFactory
{
public static Operation GetOperation(string str)//寫了一個靜態方法,實現了根據不同的運算符來構造不同的運算對象。
{
Operation p = new Operation();//由於Operation為基類,所以它可以接受其他的子類。
switch (str)
{
case "+": p = new OperationAdd(); break;
case "-": p = new OperationSub(); break;
case "*": p = new OperationChen(); break;
case "/": p = new OperationChu(); break;
}
return p;
}
}
class Program
{
static void Main(string[] args)
{
int numA, numB;
string C;
string result = null;
Console.WriteLine("請輸入第一個數:\n");
numA = int.Parse(Console.ReadLine());
Console.WriteLine("請輸入操作符:\n");
C = Console.ReadLine();
Console.WriteLine("請輸入第二個數:\n");
numB = int.Parse(Console.ReadLine());
Operation p = OperationFactory.GetOperation(C);
p.NumA = numA;
p.NumB = numB;
Console.WriteLine("結果為:\n");
Console.WriteLine(p.GetResult());
Console.ReadLine();
}
}
}