写一个很简单的程序 ,要求:输入加减乘除的符号 就输出结果2 与 1 的结果,其实原题是写计算器的程序 为了简单完成题目 重在理解那种编程思维
我认为自己写的精彩的代码是
为了让程序扩展性高 一般使用
工厂模式
代码
abstract class MathOperation
{
public abstract void Exection();
}
class Add : MathOperation
{
public override void Exection()
{
Console.WriteLine("加法");
}
}
class Subtract : MathOperation
{
public override void Exection()
{
Console.WriteLine("减法");
}
}
//下面就是工厂了 interface IMathFactory
{
MathOperation CreateOperate();
}
class AddFactory:IMathFactory
{
public MathOperation CreateOperate()
{
return new Add();
}
}
class SubtractFactory : IMathFactory
{
public MathOperation CreateOperate()
{
return new Subtract();
}
}
//一般使用工厂模式没有下面这步 这里是使用表驱动方法了 为了在真实情况下界面修改对程序修改最小
class MathFactory
{
Dictionary<string, IMathFactory> dic = new Dictionary<string, IMathFactory>();
public MathOperation CreateOperate(string OpName)
{
//当扩展功能时只要修改这里代码 就是dic 增加其他的 数学运算类
dic.Add("+",new AddFactory());
dic.Add("-",new SubtractFactory());
IMathFactory mafa = dic[OpName];
return mafa.CreateOperate();
}
}
掉用代码:
MathFactory mmm = new MathFactory();
MathOperation mo = mmm.CreateOperate(Console.ReadKey().KeyChar.ToString());
mo.Exection();
Console.ReadKey() 模拟了界面行为
不过下面代码好像更加干净
仅仅就是用了 委托和表驱动法
扩展功能就是增加一个函数 而不用写增加类了,工厂模式要增加功能 就必须增加很多类
class Maths
{
int a; int b;
public delegate int Mehtod(int aaa, int bbb);
Dictionary<string, Mehtod> dic = new Dictionary<string, Mehtod>();
public int GetMathResult(int a, int b, string OpName)
{
dic.Add("+", Add1);
dic.Add("-", Subtract1);
return dic[OpName](a, b);
}
int Add1(int a, int b)
{
return a + b;
}
int Subtract1(int a, int b)
{
return a - b;
}
}
调用代码
Maths maths = new Maths();
int Result= maths.GetMathResult(2, 1, Console.ReadKey().KeyChar.ToString());
Console.WriteLine(Result);
用可扩展的 分离界面的