设计模式之Factory应用
设计模式新手,factory模式练习,请指正!
实现计算表达式结果的练习,例如输入“1+9”输出“10”;输入“1.2+8”输出“9.2”(区分小数和整数),只实现了加法和乘法,功能微不足道,主要看思路
using System;
using System.IO ;
using System.Text ;
namespace TestFactory
{
public abstract class Test
{
public static void Main()
{
string args;
args = Console.ReadLine ();
Compute rs = GetResult.Choose (args);
Console.WriteLine (rs.GetResult ());
Console.ReadLine ();
}
}
public class GetResult
{
public static Compute Choose(string str)
{
if(str.IndexOf (".")>-1)
{
return new FloatManage(str);
}
else
{
return new IntManage(str);
}
}
}
//计算基类
public abstract class Compute
{
//保存计算表达式
protected string str;
//保存最终计算结果
protected string Result;
//保存两个操作数
protected string[] Operand = new string[2];
//计算加法
protected abstract void Add();
//计算乘法
protected abstract void Cheng();
//初始化函数
protected Compute(string strExpression )
{
str = strExpression;
GetResult();
}
//返回计算结果
public string GetResult()
{
//得到两个操作数
GetOperand();
//选择是加法还是乘法
ChooseOperation();
//返回计算结果
return Result;
}
//判断是加法还是乘法
protected void ChooseOperation()
{
if(str.IndexOf ("+")>-1)
{
Add();
}
else if (str.IndexOf ("*")>-1)
{
Cheng();
}
}
//得到两个操作数
protected void GetOperand()
{
char[] chr = new char [4];
chr[0]='+';
chr[1]='-';
chr[2]='*';
chr[3]='/';
Operand = str.Split (chr);
}
}
/// <summary>
/// 处理整数计算
/// </summary>
internal class IntManage : Compute
{
public IntManage(string ss):base(ss)
{}
protected override void Add()
{
Result = (int.Parse (Operand[0]) + int.Parse (Operand[1])).ToString();
}
protected override void Cheng()
{
Result = (int.Parse (Operand[0]) * int.Parse (Operand[1])).ToString();
}
}
/// <summary>
/// 处理小数计算
/// </summary>
internal class FloatManage : Compute
{
public FloatManage(string ss):base(ss)
{}
protected override void Add()
{
Result = (float.Parse (Operand[0]) + float.Parse (Operand[1])).ToString();
}
protected override void Cheng()
{
Result = (float.Parse (Operand[0]) * float.Parse (Operand[1])).ToString();
}
}
}