在面向过程的思维逻辑中,实现不同情况分配对应逻辑的需求时,直接使用分支语句对逻辑进行处理,但是这种处理方式对模块复用和拓展都是很不友好的,每个算法逻辑之间紧耦合在一起,当某个算法逻辑需要更改或需要新增删除逻辑时,都需要对已经正常运行的代码进行修改,这种方式违背了开闭原则。所以简单工厂模式就出现了:该模式由一个工厂类通过分支语句统一管理各类算法逻辑,而每个算法逻辑都对应一个类对象,这种方式的好处就是将算法逻辑层和客户端逻辑层分离,当某个算法逻辑出现问题就不会影响到其他逻辑,当需要新增算法逻辑,只需新增对应算法逻辑和新增工厂模式中的分支语句即可,符合开闭原则,使系统更稳定。
借鉴《大话设计模式》,以编写运算工厂解释代码:
首先定义一个运算基类:
public class Operation
{
private double numberA;
private double numberB;
public double NumberA { get; set; }
public double NumberB { get; set; }
public virtual double GetResult()
{
double result = 0;
return result;
}
}
然后创建各个算法模块:
public class OperationAdd : MyOperation
{
public override double GetResult()
{
double result = 0;
result = NumberA + NumberB;
return result;
}
}
public class OperationSub : MyOperation
{
public override double GetResult()
{
double result = 0;
result = NumberA - NumberB;
return result;
}
}
public class OperationMul : MyOperation
{
public override double GetResult()
{
double result = 0;
result = NumberA * NumberB;
return result;
}
}
public class OperationDiv : MyOperation
{
public override double GetResult()
{
double result = 0;
if (NumberB == 0)
throw new Exception("除数不能为零");
result = NumberA / NumberB;
return result;
}
}
接下来创建简单运算工厂类
public class OperationFactory
{
public static MyOperation creatOperate(string operate)
{
MyOperation 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;
}
}
客户端代码:
MyOperation oper = OperationFactory.creatOperate("+");
oper.NumberA = 1;
oper.NumberB = 2;
double result = oper.GetResult();
这时候在某个算法出现问题或者新增删除算法只需要更改相关算法类和工厂类,对于功能拓展更友好,在算法移植上也更便捷。
下期讲解——策略模式。