• 工厂方法模式(7)


    今天来讲一下工厂方法模式。

    大家可能听着这个模式有点耳熟,是的,前面第一篇博文,我们讲到了简单工厂模式。嗯,他们有的确非常相似,今天我们就拿简单工厂模式中的案例举例子即可。

    学会了简单工厂模式,对于工厂方法模式也就自然而然的会了。

    大家知道,简单工厂有个很明显的缺点,就案例来说,我增加一种算法,则需要增加一个类(这个没问题,扩展嘛。),但是,我还要修改工厂,在工厂方法类面多加一个case判断,这其实违背了开放封闭原则的。(尽量不要修改已经写好的类)。

    那么,我们可以用工厂方法模式来解决这个问题。

    我们将案例中的OperationFactory类抽象出一个接口,然后让每一个case都拆分成继承这个接口的类。

    代码如下:

     1   //工厂的抽象接口
     2     interface IFactory
     3     {
     4         Operation CreateOperation();
     5     }
     6     //加法工厂
     7     class AddFactory : IFactory
     8     {
     9         public Operation CreateOperation()
    10         {
    11             return new OperationAdd();
    12         }
    13     }
    14     //减法工厂
    15     class SubFactory : IFactory
    16     {
    17         public Operation CreateOperation()
    18         {
    19             return new OperationSub();
    20         }
    21     }
    22     //乘法工厂
    23     class MulFactory : IFactory
    24     {
    25         public Operation CreateOperation()
    26         {
    27             return new OperationMul();
    28         }
    29     }
    30     //除法工厂
    31     class DivFactory : IFactory
    32     {
    33         public Operation CreateOperation()
    34         {
    35             return new OperationDiv();
    36         }
    37     }

    这样的话,客户端就改成如下:

     1 public static void Main()
     2         {
     3             Operation oper = new Operation();
     4             AddFactory addfac = new AddFactory();
     5             oper = addfac.CreateOperation();
     6             oper.NumberA = 2;
     7             oper.NumberB = 3;
     8             var result = oper.GetResult();
     9             Console.WriteLine(result);
    10             Console.ReadKey();
    11         }

    好,这样,就将原来的简单工厂模式改编成工厂方法模式了。

    下面我们看看工厂方法模式对于简单工厂模式有什么优点呢?

    如果我们增加一种算法的话,只需要增加这个算法的类,然后增加一个这个算法的工厂,即可, 需要修改的也就只有客户端而已。

    那么有没有更好的方法呢?(甚至连客户端都不用修改) 那么就还是上次咱们提到的,用反射来解决。(后面博文会讲到的)。

    好了,本篇博文与简单工厂模式相类似,大家可以对比着来看,加深一下自己的理解。

    ok。今天就讲到这里。下一次,将讲解 原型模式


    本系列将持续更新,喜欢的小伙伴可以点一下关注和推荐,谢谢大家的支持。

  • 相关阅读:
    【.Net--资料】
    【系统Configmachine.config与自己的应用程序的App.config/Web.Config配置节点重复】解决方法
    【AutoMapper】实体类间自动实现映射关系,及其转换。
    【EntityFramwork--处理数据并发问题】
    【IOC--Common Service Locator】不依赖于某个具体的IoC
    Android学习——碎片Fragment的使用
    Android学习——利用RecyclerView编写聊天界面
    Android学习——控件ListView的使用
    Android学习——LinearLayout布局实现居中、左对齐、右对齐
    Android学习——Button填充颜色及实现圆角
  • 原文地址:https://www.cnblogs.com/xiaomowang/p/6290233.html
Copyright © 2020-2023  润新知