简单工厂

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

  

posted on 2014-07-10 22:39  Super Cow  阅读(217)  评论(0编辑  收藏  举报

导航