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();
            }
    

      

  • 相关阅读:
    阅读笔记——字节跳动公司的“字节范儿”
    阅读笔记——今日头条的人才机制
    对老师的评价及个人建议
    个人加分项
    阅读笔记——字节跳动创始人张一鸣的发展经历
    观影数据集之大数据分析
    阅读笔记
    谷粒商城分布式高级(八)—— 缓存SpringCache
    谷粒商城分布式高级(二)—— ElasticSearch全文检索
    谷粒商城分布式高级(五)—— 性能压测(压力测试 & 性能监控 & nginx动静分离 )
  • 原文地址:https://www.cnblogs.com/superCow/p/3836707.html
Copyright © 2011-2022 走看看