Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop “有没有?”;“更多”;抽象工厂模式的真实示例?_Oop_Design Patterns_Abstract Factory_Open Closed Principle - Fatal编程技术网

Oop “有没有?”;“更多”;抽象工厂模式的真实示例?

Oop “有没有?”;“更多”;抽象工厂模式的真实示例?,oop,design-patterns,abstract-factory,open-closed-principle,Oop,Design Patterns,Abstract Factory,Open Closed Principle,我目前正在研究OPP的设计模式,只是给你一些背景知识。这不是我第一次遇到这种模式。我已经编程一段时间了(十年左右),我非常熟悉许多编程原理,尤其是SOLID。我大部分时间都在做web应用程序开发,所以我可能错过了一些在不同编程领域可以学到的东西 正如标题所示,我正在努力更深入地掌握抽象的工厂模式。我确实理解定义和“何时使用模式”部分,但我仍然没有抓住要点。特别是当把开闭原理从固体添加到方程中时 我是什么意思 上图取自GOF的设计模式书 要使这篇文章真正成为一个问题,有两件事我自己找不到答案:

我目前正在研究OPP的设计模式,只是给你一些背景知识。这不是我第一次遇到这种模式。我已经编程一段时间了(十年左右),我非常熟悉许多编程原理,尤其是SOLID。我大部分时间都在做web应用程序开发,所以我可能错过了一些在不同编程领域可以学到的东西

正如标题所示,我正在努力更深入地掌握抽象的工厂模式。我确实理解定义和“何时使用模式”部分,但我仍然没有抓住要点。特别是当把开闭原理从固体添加到方程中时

我是什么意思

上图取自GOF的设计模式书

要使这篇文章真正成为一个问题,有两件事我自己找不到答案:

  • 当你们学习开闭原则时,它坚持认为类应该关闭以进行修改。它的实现结果是某种近似于策略模式的东西。当您查看AbstractFactory的方法结构时,它会将它创建的所有产品列为单独的方法。这意味着,当我们想要向该系列添加新产品时,我们需要修改AbstractFactory并创建新方法。这是否违反了开闭原则?也许没有更好的办法,是吗

  • 第二,除了书中使用的例子(WidgetFactory-GOF,PizzaStore-HeadFirst),还有谁能给我提供一些真实世界的例子吗?您是否有任何可以说“是的,这是我通常使用抽象工厂实现的东西”的通用实现?抽象工厂什么时候真正有用?或者我很理解这种模式,但它在web开发中并不常见

  • 我希望我能设法表达我对模式的不确定性。在任何情况下,请随时提出后续问题,我很乐意提供更多细节

    提前谢谢你

    实现[OCP]的结果类似于战略模式

    可能吧。实现OCP有多种方法。Bertrand Meyer最初在定义继承原则时吹捧继承

    …当我们想向该系列添加新产品时,我们需要修改AbstractFactory并创建新方法。这不是一种违反

    可能吧。这取决于您如何实现该模式,但是GoF手册在第90页上确实承认了这个问题

    支持新产品是困难的。将抽象工厂扩展到 生产新产品并不容易。那是因为抽象工厂 接口修复了可以创建的产品集。支持新类型的 产品需要扩展factory接口,这涉及到更改 AbstractFactory类及其所有子类。我们讨论一种解决方案 这个问题将在实现部分讨论

    GoF书中提到的解决方案是参数化AbstractFactory方法,这会导致它自己的一组问题

    …这在web开发中并不常见


    不,不是。在编写GoF书时,依赖注入不是一种常见的模式,但今天它几乎已经取代了对抽象工厂的需求。今天,我几乎愿意称抽象工厂为反模式;但我仍然持开放态度,认为可能有一个问题比DI更适合AF。我只是还没看到一个。

    你在这里看到巴卢斯克的答案了吗?这应该给你一些真实世界的例子?我没有。我来看看,谢谢。