设计模式之—简单工厂模式

时间:2023-03-08 20:12:46

简单工厂模式结构图:

设计模式之—简单工厂模式<Simple Factory Pattern >

简单工厂模式以简单的加减乘除运算为例:

运算符类(Operation):

namespace CalcTest.Simple_Factory_patterns
{
class Operation
{
private double numberA = ;
private double numberB = ;
public double NumberA
{
get { return numberA; }
set { numberA = value; }
} public double NumberB
{
get { return numberB; }
set { numberB = value; }
} public virtual double GetResult()
{
double result = ;
return result;
}
}
}

加法类(Add):继承于运算符类(Operation)

 namespace CalcTest.Simple_Factory_patterns
{
class Add :Operation
{
public override double GetResult()
{
return NumberA + NumberB;
}
}
}

减法类(Subtraction):继承于运算符类(Operation)

 namespace CalcTest.Simple_Factory_patterns
{
class Subtraction : Operation
{
public override double GetResult()
{
return NumberA - NumberB;
}
}
}

乘法类(Multiplacation):继承于运算符类(Operation)

 namespace CalcTest.Simple_Factory_patterns
{
class Multiplication : Operation
{
public override double GetResult()
{
return NumberA * NumberB;
}
}
}

除法类(Division):继承于运算符类(Operation)

 namespace CalcTest.Simple_Factory_patterns
{
class Division : Operation
{
public override double GetResult()
{
if (NumberB == )
{
throw new Exception("除数不能为0");
}
return NumberA / NumberB;
}
}
}

运算符工厂类(OperationFactory):实例合适的对象,通过多态返回父类的方式实现计算结果

 namespace CalcTest.Simple_Factory_patterns
{
class OperationFactory
{
public static Operation createOperation(string operate)
{
Operation oper = null;
switch (operate)
{
case "+":
oper = new Add();
break;
case "-":
oper = new Subtraction();
break;
case "*":
oper = new Multiplication();
break;
case "/":
oper = new Division();
break;
}
return oper;
}
}
}

测试类(Main):

 namespace CalcTest.Simple_Factory_patterns
{
class TestMain
{
public static void Main(string[] args)
{
Operation oper = null;
//先输入操作符利用简单工厂模式创建类
Console.Write("请输入操作符:(+、-、*、/)");
string operate = Console.ReadLine();
oper = OperationFactory.createOperation(operate); Console.Write("请输入数字A:");
oper.NumberA = Convert.ToDouble(Console.ReadLine()); Console.Write("请输入数字B:");
oper.NumberB = Convert.ToDouble(Console.ReadLine());
double result = oper.GetResult();
Console.WriteLine("结果为:" + result);
Console.ReadLine();
}
}
}

设计模式之—简单工厂模式<Simple Factory Pattern >

简单工厂模式操作结束!