简单工厂

正如其名,简单工厂,比较简单,直接给出一个计算器的demo(能够参见大话设计模式,按照本身的想法写的,有些许不一样)设计模式

1。 工厂中咱们的switch也能够写到配置文件中,经过反射的方式建立操做对象。mvc

例如:<add key="+" operation="加法operation的程序集">ide

 

 使用工厂的核心:能够封装易变的部分到工厂中,外界通常使用基类对象或接口,来达到依赖致使的目的。设计

 系统代码中有不少地方都是经过工厂方式建立的。对象

好比运行时中Application对象,blog

好比,mvc中的controller的建立是经过 ControllerFactory建立的。这样的例子很是多。接口

工厂模式,只不过再简单工厂的基础奖,增长了一个工厂的接口,每个对象都对应一个工厂,其实本质都是简单工厂的变形。string

咱们只要记住使用工厂的核心:封装变化,依赖倒置 就能抓住其精髓所在。it

 

   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();
        }
相关文章
相关标签/搜索