刚开始接触设计模式很晕,不明白到底什么是设计模式,其实本来是没有设计模式的,计算机语言发展过程中,慢慢积累,慢慢就产生了一种所谓设计模式的概念了,今天主要讲解简单工程模式,以计算器为例子进行设计模式讲解,如有不对,请广大行内人士进行仍转头。
根据面向对象开发,要对计算器进行简单工程模式,首先想到的需要用户界面和针对界面输入的计算数据进行对数据的操作类。
1.首先建立数据操作类库。OperationTestLibrary 为计算器操作类库名称.在其中创建数据处理操作类Operation.cs
Operation.cs该类主要实现对操作数进行的基本操作处理,比如加减乘除等基本数据操作。
先在操作类中定义二个参数A,B,对AB二个参数实现getset属性。
1)建立获取结果的虚方法:
/// <summary>
/// 得到运算结果
/// </summary>
/// <returns></returns>
public virtual double GetResult()
{
double result = 0;
return result;
}
2)实现具体的方法,比如加法,继承虚方法
/// <summary>
/// 加法类
/// </summary>
class OperationAdd : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA + NumberB;
return result;
}
}
3)建立其他操作类应该实现的方法,比如其他的减乘除,开方,平方等,不过一定要继承结果的虚方法。
4)在操作类中建立简单运算工厂
/// <summary>
/// 运算类工厂
/// </summary>
public class OperationFactory
{
public static Operation createOperate(string operate)
{
Operation oper = null;
switch (operate)
{
case "+":
{
oper = new OperationAdd();
break;
}
case "-":
{
oper = new OperationSub();
break;
}
case "*":
{
oper = new OperationMul();
break;
}
case "/":
{
oper = new OperationDiv();
break;
}
}
return oper;
}
}
其中的那几个函数需要事件完成好
2.判断输入的操作符是否合法检验函数
/// <summary>
/// 检查输入的字符串是否准确
/// </summary>
/// <param name="currentNumber"></param>
/// <param name="inputString"></param>
/// <returns></returns>
public static string checkNumberInput(string currentNumber, string inputString)
{
string result = "";
if (inputString == ".")
{
if (currentNumber.IndexOf(".") < 0)
{
if (currentNumber.Length == 0)
result = "0" + inputString;
else
result = currentNumber + inputString;
}
}
else if (currentNumber == "0")
{
result = inputString;
}
else
{
result = currentNumber + inputString;
}
return result;
}
}
3.用户界面调用上述类即可实现。
比如+按钮实现功能如下
private void buttonAdd_Click(object sender, EventArgs e)
{
if (txtShow.Text != "")
{
oper = OperationFactory.createOperate(((Button)sender).Text);
oper.NumberA = Convert.ToDouble(txtShow.Text);
bOperate = true;
}
}
上述就是简单的工厂模式,其实就是界面和操作类分开,操作类完成主要操作功能,不涉及界面;界面主要显示对应的操作符信息,通过事件调用操作类的函数