博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工厂方法模式(7)
阅读量:4465 次
发布时间:2019-06-08

本文共 1820 字,大约阅读时间需要 6 分钟。

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

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

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

大家知道,简单工厂有个很明显的缺点,就案例来说,我增加一种算法,则需要增加一个类(这个没问题,扩展嘛。),但是,我还要修改工厂,在工厂方法类面多加一个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 : IFactory16     {17         public Operation CreateOperation()18         {19             return new OperationSub();20         }21     }22     //乘法工厂23     class MulFactory : IFactory24     {25         public Operation CreateOperation()26         {27             return new OperationMul();28         }29     }30     //除法工厂31     class DivFactory : IFactory32     {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。今天就讲到这里。下一次,将讲解 原型模式


 

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

 

转载于:https://www.cnblogs.com/xiaomowang/p/6290233.html

你可能感兴趣的文章
用MySQL的存储过程来实现一些经典函数
查看>>
React (2) -- State and Lifecycle
查看>>
【转】在EmEditor上编译并运行JAVA
查看>>
关于SqlDateTime溢出的问题
查看>>
jquery下php与ajax的数据交换方式
查看>>
魅蓝Note有几种颜色 魅蓝Note哪个颜色好看
查看>>
使用PullToRefresh实现下拉刷新和上拉加载
查看>>
透明度百分比与十六进制转换
查看>>
HBase表预分区
查看>>
NSBundle,UIImage,UIButton的使用
查看>>
vue-cli3 中console.log报错
查看>>
GridView 中Item项居中显示
查看>>
UML类图五种关系与代码的对应关系
查看>>
如何理解作用域
查看>>
从无到满意offer,你需要知道的那些事
查看>>
P1516 青蛙的约会 洛谷
查看>>
SDOI2011 染色
查看>>
JQuery EasyUI combobox动态添加option
查看>>
面向连接的TCP概述
查看>>
前端快捷方式 [记录]
查看>>