簡單工廠

正如其名,簡單工廠,比較簡單,直接給出一個計算器的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();
        }
相關文章
相關標籤/搜索