正如其名,简单工厂,比较简单,直接给出一个计算器的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(); }