首页 > 代码库 > 简单工厂

简单工厂

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