gpt4 book ai didi

java - 关于工厂模式的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:18:48 25 4
gpt4 key购买 nike

很多人说他们在他们的项目中使用工厂模式。但是当我真正看到他们的实现时,它看起来完全不同根据定义,我在第一本书中读到了什么。在书中,他们描述了两种工厂模式,即

Factory Method:- A class specifies its sub-classes to specify which objects to create based on some parameter. So we expect here some abstract method in base class whihich will be implemented by child class and pupose of that will be to create some object

Abstract Factory:- Provides an factory (in form of interface or abstract factory)for creating families of related or dependent objects without specifying their concrete classes.

我有一个问题,他们所说的家属或亲属是什么意思对象。 让我们引用 http://www.apwebco.com/gofpatterns/creational/AbstractFactory.html .根据我的理解,这意味着在 FinancialToolsFactory(在链接中)能够创建 TaxProcessor,这是一个产品系列,其中实际创建的产品是 CanadaTaxProcessorEuropeTaxProcessor 。所以这里我们将有 n 个具体工厂(在本例中为 CanadaFinancialToolsFactoryEuropeFinancialToolsFactory),在本例中它们将扩展/实现抽象工厂FinancialToolsFactory

请告诉我以上理解是否正确,因为我认为这是工厂模式的关键。

第二个问题:

人们以工厂模式的名义所做的事情如下:

public class MyFactory
{
public static <T> T getObject(Class<T> cls)
{
if (cls == null)
{
throw new IllegalArgumentException("Invalid className");
}

T daoObject = (T)map.get(cls);

if (daoObject == null)
{
daoObject = loadObject(cls);
}

return daoObject;
}
}

它们只是从 main 方法中传递类似 Example.class 的类,并获取该特定类的对象实例。现在,如果我们按照开头(从第一本书开始)和其他网站描述的工厂模式的实际概念来看,它不遵循这两种工厂模式中的任何一种。对我来说,它看起来像是一个实用程序类,我们在其中传递类并获取对象实例。 如果你们同意这一点,请告诉我?

最佳答案

您对工厂方法和抽象工厂模式的理解是正确的。

当人们创建仅负责创建其他对象的类时,他们自然倾向于将其命名为 Factory。这本身并不是没有道理的。问题是没有工厂模式

这里出现混淆有两个原因:

  • 一些开发人员只是想引入另一种模式并声称他们正在使用“工厂模式”,指的是创建其他对象的对象

  • 学习设计模式的开发人员看到一个类称为工厂,无论是否实现了模式,并假设它必须是工厂方法或抽象工厂。这很令人困惑,因为您随后试图找出它是哪一个,从而质疑您自己对真实模式的理解。

请记住,设计模式不仅是常见问题的解决方案,而且还有助于建立讨论设计的语言。在这种情况下,您期望的设计语言并不是开发人员实际使用的。只有当他们说他们正在使用特定的设计模式时,他们所做的才是错误的。

关于java - 关于工厂模式的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7205999/

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