我被告知,在实现工厂方法模式时使用静态方法是错误的,应避免使用。因为我不太熟悉该模式,所以我接受了该答案。
阅读文章并深入研究之后,我找不到任何支持此声明的资源。
有人可以帮我解决这种情况。我应该在工厂方法中避免使用静态关键字吗?如果可以,它们何时有用?
来源:https://sourcemaking.com/design_patterns/factory_method据我所知,可以在工厂方法上使用静态。但是@Serge Ballesta *在评论中有一个很好的观点。
all调用者。即使仅在测试或暂存环境中需要特殊的实现,这也是通常的情况。在这些情况下,调用方
depends的正确功能取决于实现的选择,并且静态工厂方法违反了依赖关系反转原则。
如果同一实现不一定在所有用途中都可以接受,那么您应该注入一个非静态工厂,以便调用者不会与特定的实现选择耦合。工厂模式时,他们可能在谈论任何创造模式。但最常见的短语是[[Factory Pattern表示对设计模式的无知。
[两个非常具体的工厂模式已在著名的《四人帮》一书中发表:Abstract Factory and Factory Method。]Static Factory由Joshua Bloch在Effective Java中推广。除了具有相似的名称之外,Bloch的静态工厂方法与GoF的工厂方法之间没有no关系。然后我将调整原始问题,以提供清晰的答案。
在GoF Factory Method模式中是否禁止使用静态方法?
是。 GoF模式需要继承,static
方法不支持这种继承。这不会降低“静态工厂”模式的用处!静态工厂是一种完全合法的设计模式,恰好以与GoF工厂方法模式不同的方式实现。您可以在适当的时候使用两种模式。现在您也可以为它们加上适当的标签。