zoukankan      html  css  js  c++  java
  • 简单工厂

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

      

  • 相关阅读:
    sublime开启vim模式
    git命令行界面
    搬进Github
    【POJ 2886】Who Gets the Most Candies?
    【UVA 1451】Average
    【CodeForces 625A】Guest From the Past
    【ZOJ 3480】Duck Typing
    【POJ 3320】Jessica's Reading Problemc(尺取法)
    【HDU 1445】Ride to School
    【HDU 5578】Friendship of Frog
  • 原文地址:https://www.cnblogs.com/superCow/p/3836707.html
Copyright © 2011-2022 走看看