简单工厂
正如其名,简单工厂,比较简单,直接给出一个计算器的demo(可以参见大话设计模式,按照自己的想法写的,有些许不同)
1。 工厂中我们的switch也可以写到配置文件中,通过反射的方式创建操作对象。
例如:<add key="+" operation="加法operation的程序集">
使用工厂的核心:可以封装易变的部分到工厂中,外界一般使用基类对象或接口,来达到依赖导致的目的。
系统代码中有很多地方都是通过工厂方式创建的。
比如运行时中Application对象,

比如,mvc中的controller的创建是通过 ControllerFactory创建的。这样的例子非常多。
工厂模式,只不过再简单工厂的基础奖,增加了一个工厂的接口,每一个对象都对应一个工厂,其实本质都是简单工厂的变形。
我们只要记住使用工厂的核心:封装变化,依赖倒置 就能抓住其精髓所在。
public abstract class Operation
{
public abstract double GetOperaterResult(double num1, double num2);
}
public class Add : Operation
{
public override double GetOperaterResult(double num1, double num2)
{
return num1 + num2;
}
}
public class Sub : Operation
{
public override double GetOperaterResult(double num1, double num2)
{
return num1 - num2;
}
}
public class Mul : Operation
{
public override double GetOperaterResult(double num1, double num2)
{
return num1*num2;
}
}
public class Div : Operation
{
public override double GetOperaterResult(double num1, double num2)
{
if (num2.Equals(0))
{
throw new DivideByZeroException();
}
else
{
return num1/num2;
}
}
}
public static Operation CreateOperation(string op)
{
Operation operation = null;
switch (op)
{
case "+":
operation=new Add();
break;
case "-":
operation=new Sub();
break;
case "*":
operation=new Mul();
break;
case "/":
operation=new Div();
break;
default:
break;
}
return operation;
}
static void Main(string[] args)
{
double num1 = 3.6;
double num2 = 1.43;
double res = SimpleFactory.CreateOperation("*").GetOperaterResult(num1, num2);
Console.WriteLine(res);
Console.ReadKey();
}
浙公网安备 33010602011771号