版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aimin_com/article/details/83035342
What’s this?
Factory 工厂实际是对所有的类做了一个检查判断而并非类似于if语句一样每一个都进行判断,而是利用swith case 语句进行选择(参考swith case)
工厂类一般用静态方法,通过接收的参数不同来返回不同的对象实例,不修改代码的话是无法扩展的(就是每次增加一个类,就需要在工厂方法里面添加一个case)
Please look at the class diagram |
其中:简单工厂OperationFactory和运算类Operation是依赖关系,而Program客户端和简单工厂肯定是关联关系哦!
How do you do ?
First: 解决Operation类(既设计加减乘除计算)
//运算类
public class Operation
{
private double _numberA = 0;
private double _numberB = 0;
public double NumberA
{
get { return _numberA; }
set { _numberA = value; }
}
public double NumberB
{
get { return _numberB; }
set { _numberB = value; }
}
public virtual double GetResult()
{
double result = 0;
return result;
}
}
/// <summary>
/// 加法类
/// </summary>
class OperationAdd : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA + NumberB;
return result;
}
}
/// <summary>
/// 减法类
/// </summary>
class OperationSub : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA - NumberB;
return result;
}
}
/// <summary>
/// 乘法类
/// </summary>
class OperationMul : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA * NumberB;
return result;
}
}
/// <summary>
/// 除法类
/// </summary>
class OperationDiv : Operation
{
public override double GetResult()
{
double result = 0;
if (NumberB == 0)
{
throw new Exception("除数不能为0.");
}
result = NumberA / NumberB;
return result;
}
}
Second: 设计工厂
/// <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;
}
}
Finish:客户端
//可以在控制台窗体使用,使用try-catch是为了检测错误,这里使用只是开始的时候,写完后不建议用try-catch。
try
{
Operation oper;
Console.Write("请选择运算符号(+、—、*、/:)");
oper = OperationFactory.createOperate(Console.ReadLine());
Console.Write("请输入数字A:");
oper.NumberA = double.Parse(Console.ReadLine());
Console.Write("请输入数字B:");
oper.NumberB = double.Parse(Console.ReadLine());
double result = oper.GetResult();
Console.WriteLine(result);
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("您输入有错:" + ex.Message);
}
小结:编程是一门技术,更是一门艺术,小菜刚刚开始请不要见怪哦,学习路上永不止步!