设计模式之Factory应用

tangligang 2003-10-28 11:32:24
设计模式新手,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();
}
}
}
...全文
38 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
513 2003-10-31
  • 打赏
  • 举报
回复
你可以看看这里,比较一下
http://www.aspcool.com/lanmu/index.asp
atlove 2003-10-31
  • 打赏
  • 举报
回复
up

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧