简单工厂模式是设计模式的开始,也是比较简单基础的模式用法,就来总结下“简单工厂模式的用法”
(1)优点:
实现了对象创建和客户端分离(业务和界面分离) 。
减少了代码的冗余度和复杂性,直接把所需要的业务封装起来,然后直接按调用就可以了,大大提高了系统的灵活性。
(2)缺点
在工厂类中集中了所有产品的创建逻辑,职责过重,一旦不能正常工作吗,整个系统都要受影响。
系统在扩展的时候比较困难,因为使用了静态的工厂方法,造成工厂角色无法形成继承等级的结构,所以工厂类不能得到很好地扩展。
2.简单工厂模式:
3.业务的封装
//把运算封装成一个类
public class Operation
{
public static double GetResult(double numberA, double numberB, string operate)
{
double result = 0d;
switch (operate)
{
case "+":
result = numberA + numberB;
break;
case "-":
result = numberA - numberB;
break;
case "*":
result = numberA * numberB;
break;
case "%":
result = numberA % numberB;
break;
}
return result;
}
}
客户端的实现:
static void Main(string[] args)
{
try
{
Console.WriteLine("请输入数字A:");
string strNumberA = Console.ReadLine();
Console.Write("请选择运算符号(+,-,*,%)");
string strOperate = Console.ReadLine();
Console.WriteLine("请输入数字B:");
string strNumberB = Console.ReadLine();
string strResult = "";
strResult =
Convert.ToString(Operation.GetResult(Convert.ToDouble(strNumberA),
Convert.ToDouble(strNumberB ), strOperate));
Console.WriteLine("结果是:"+ strResult);
}
catch (Exception ex)
{
Console.WriteLine("您的输入有错:" + ex.Message);
}
(这样的写法,把算法给封装起来,就会完全的把业务和界面给分离)。
-----------------------------------------------------------------------------------------------------------------------------
2.算法的分离(简单工厂模式)
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;
}
}
加减乘除类:
class OperationAdd : Operation //加法类继承运算
{
public override double GetResult()
{
double result = 0;
result = NumberA + NumberB;
return result;
}
}
class OperationSub : Operation //减法类继承运算。
{
public override double GetResult()
{
double result = 0;
result = NumberA - NumberB;
return result;
}
}
class OperationMul : Operation //乘法类运算
{
public override double GetResult()
{
double result = 0;
result = NumberA * NumberB;
return result;
}
}
class OperationDiy : Operation //除法运算
{
public override double GetResult()
{
double result = 0;
if (NumberB == 0)
throw new Exception("除数不能为零0,。");
return result;
}
}
简单工厂模式:
(1)简单运算工厂类
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)客户端代码
Operation oper;
oper = OperationFactory.createOperate("+");
oper.NumberA = 1;
oper.NumberB = 2;
double result = oper.GetResult();
(如果我们需要更改运算符号的好,那我们直接在 OperationAdd运算类里修改就可以了).