zoukankan      html  css  js  c++  java
  • 工厂方法模式

    前一篇文章介绍了简单工厂模式以及如何使用简单工厂模式来实现计算器。

    但是简单工厂模式有个问题,就是当我们需要扩展运算操作的时候,我们需要修改整个运算工厂类,或者说整个运算工厂类都必须开发才能允许操作扩展,这违背了开发-封闭原则,这是我们就需要工厂方法模式了。也就是说工厂方法模式必须定义一个用于创建对象的接口,让子类决定实例化哪个对象。

    也就是说,工厂方法模式把简单工厂模式的内部逻辑判断移到了客户端来判断,由客户端决定来实例化哪个对象。

    以实现计算器为例,对运算操作功能进行扩展时,我们不再需要在运算工厂类中新增case判断,只需要新增一个相应功能的运算类和工厂类即可。

    1     /// <summary>
    2     /// 工厂方法
    3     /// </summary>
    4     interface IFactory
    5     {
    6         Operation CreateOperation();
    7     }
     1     /// <summary>
     2     /// 加法类
     3     /// </summary>
     4     class OperationAdd : Operation
     5     {
     6         public override double GetResult()
     7         {
     8             double result = 0;
     9             result = NumberA + NumberB;
    10             return result;
    11         }
    12     }
     1     /// <summary>
     2     /// 专门负责生产“+”的工厂
     3     /// </summary>
     4     class AddFactory : IFactory
     5     {
     6         public Operation CreateOperation()
     7         {
     8             return new OperationAdd();
     9         }
    10     }

    如果需要新增加法运算,我们只需要新增上面的加法类和负责生产“+”的工厂,不再需要像简单工厂模式去修改整个工厂类,让工厂类暴露在外面。

    客户端调用:

    1 IFactory operFactory = new AddFactory();
    2             Operation oper = operFactory.CreateOperation();
    3             oper.NumberA = 1;
    4             oper.NumberB = 2;
    5             double result=oper.GetResult();
    6 
    7             Console.WriteLine(result);
    8 
    9             Console.Read();

    将对运算操作实例化的判断从简单工厂模式的工厂类中移到了客户端进行。

    寻找突破。。。
  • 相关阅读:
    Windows下 Mysql忘记密码的修改方法
    java 多文件压缩下载
    MySQL配置文件中jdbc.url
    java实现excle文件上传,解析
    MySQL事务
    重拾MySQL
    Linux中修改MySql配置文件
    Freemarker模板引擎
    过滤器、监听器、拦截器
    XML基础
  • 原文地址:https://www.cnblogs.com/iskyoole/p/2552315.html
Copyright © 2011-2022 走看看