gpt4 book ai didi

java - 工厂方法设计模式 `static`修饰符必须需要或不需要

转载 作者:行者123 更新时间:2023-12-01 21:34:21 24 4
gpt4 key购买 nike

我正在学习设计模式。我研究过Factory Design Pattern在java中,我有一些我不太理解的东西,我正在下面编写它们。

  1. Factory 设计模式和Factory Method 设计模式有什么不同吗?
  2. 我在一些examples中看到,工厂类的 get 方法是 static 以及一些 examples它不是静态的。正确的做法是什么?

如有任何帮助,我们将不胜感激。

最佳答案

我对设计模式的了解不是太深,因为我没有阅读大量抽象地讨论它们的书籍,但我当然知道它们是什么并且知道如何应用它们。以下是我对这两种模式的理解:

  • Factory 是一种通过传递知道如何构造其他对象的对象来延迟对象实例化的模式。这有几个优点。例如,假设您正在编写一个主题池库。池包含可以执行某些操作的对象,并且您希望能够创建任意大小的池。池中的每个对象都必须是不同的对象。您可以要求池的用户在池中提供尽可能多的对象,但您也可以要求他们提供一个工厂,您将使用该工厂自己实例化对象。这样,您还可以动态更改池的大小、销毁或重新生成对象等...它提供了您所需的所有灵 active ,而无需了解池所持有的对象的任何信息。

  • 工厂方法是不同的。假设您有一个带有很多参数的大型构造函数。其中一些参数可能有默认值,或者您可能有多种方式来配置此类。您当然可以为每个典型配置(参数集)添加一个构造函数,但这对用户不友好,因为所有构造函数共享相同的名称。为了使其更容易,您可以使用静态方法,仅使用适当的配置调用构造函数。优点是您可以命名这些方法(defaultHttpClientForProddefaultHttpClientForDev 等...)。另一个用例是,如果您有一个庞大的类层次结构,例如由数十个类扩展的抽象类 Car。您可以使用每个单独的构造器来构建您的梦想汽车,但您必须查看目录的每一页才能决定您想要哪一辆。您也可以使用一个页面来汇总所有可用的汽车,这将是一个包含大量工厂方法的类,使它们更容易被发现。

对于你的第二个问题,我想说这要看情况。如果您不需要过多自定义工厂或注入(inject)大量上下文,那么带有一些参数的静态方法就可以解决问题。如果您希望您的工厂更具可配置性,那么具有属性和实例方法的类会更好。

关于java - 工厂方法设计模式 `static`修饰符必须需要或不需要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37088077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com