是否禁止在工厂模式中使用静态方法?

问题描述 投票:0回答:3

我被告知,在实现工厂方法模式时使用静态方法是错误的,应避免使用。因为我不太熟悉该模式,所以我接受了该答案。

阅读文章并深入研究之后,我找不到任何支持此声明的资源。

有人可以帮我解决这种情况。我应该在工厂方法中避免使用静态关键字吗?如果可以,它们何时有用?

design-patterns factory-pattern factory-method
3个回答
1
投票
工厂方法的越来越流行的定义是:类的静态方法,该方法返回该类类型的对象。但是与构造函数不同,它返回的实际对象可能是子类的实例。
来源:https://sourcemaking.com/design_patterns/factory_method

据我所知,可以在工厂方法上使用静态。但是@Serge Ballesta *在评论中有一个很好的观点。


1
投票
但是,有时不一定相同的实现就足以满足

all调用者。即使仅在测试或暂存环境中需要特殊的实现,这也是通常的情况。在这些情况下,调用方

depends的正确功能取决于实现的选择,并且静态工厂方法违反了依赖关系反转原则。

如果同一实现不一定在所有用途中都可以接受,那么您应该注入一个非静态工厂,以便调用者不会与特定的实现选择耦合。

0
投票
Factory描述具有不同实现的模式类别。当有人说

工厂模式时,他们可能在谈论任何创造模式。但最常见的短语是[[Factory Pattern表示对设计模式的无知。

[两个非常具体的工厂模式已在著名的《四人帮》一书中发表:Abstract Factory and Factory Method。]Static Factory由Joshua Bloch在Effective Java中推广。除了具有相似的名称之外,Bloch的静态工厂方法与GoF的工厂方法之间没有no关系。

然后我将调整原始问题,以提供清晰的答案。

在GoF Factory Method模式中是否禁止使用静态方法?

是。 GoF模式需要继承,static方法不支持这种继承。这不会降低“静态工厂”模式的用处!静态工厂是一种完全合法的设计模式,恰好以与GoF工厂方法模式不同的方式实现。您可以在适当的时候使用两种模式。现在您也可以为它们加上适当的标签。

© www.soinside.com 2019 - 2024. All rights reserved.