gpt4 book ai didi

java - 对这个工厂感到困惑,因为它看起来既不像抽象工厂也不像工厂方法

转载 作者:行者123 更新时间:2023-11-29 06:25:12 25 4
gpt4 key购买 nike

我正在研究 Guice,最近一直在阅读它的文档。

阅读motivation我不明白工厂部分,为什么他们这样命名。对我来说,工厂只是他们希望它在调用 getInstance() 后返回的实现类的包装器。

public class CreditCardProcessorFactory {

private static CreditCardProcessor instance;

public static void setInstance(CreditCardProcessor creditCardProcessor) {
instance = creditCardProcessor;
}

public static CreditCardProcessor getInstance() {
if (instance == null) {
throw new IllegalStateException("CreditCardProcessorFactory not initialized. "
+ "Did you forget to call CreditCardProcessor.setInstance() ?");
}

return instance;
}
}

如果它既不是抽象工厂也不是工厂方法(至少它们最初是由 GoF 定义的),为什么还要称它为工厂?还是我遗漏了什么?

谢谢。

编辑:如果有人想出更好的标题,我会很乐意更改它。

最佳答案

我是该文档的作者。我称它为工厂是为了与 JDK 类(如 DocumentBuilderFactory 和 TransformerFactory)保持一致。如果从未调用过 setInstance(),则该示例的先前修订版会返回默认实现:

  public static CreditCardProcessor getInstance() {
if (instance == null) {
return new SquareCreditCardProcessor();
}
return instance;
}

我更改了它以避免从工厂到其实现的编译时依赖性。该类具有 setInstance(),因为它比 JDK 用于在运行时选择实现的系统属性更简单。

由于我们试图激发依赖注入(inject),因此展示一个功能齐全的工厂似乎是不公平的,即使这意味着不忠于原始的 GoF 模式。

关于java - 对这个工厂感到困惑,因为它看起来既不像抽象工厂也不像工厂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2904290/

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