gpt4 book ai didi

design-patterns - 工厂模式 - CreateInstance 是否静态?

转载 作者:行者123 更新时间:2023-12-03 08:46:08 25 4
gpt4 key购买 nike

这是关于工厂模式的。我有点困惑。

我看到了 createInstance() 的实现方法是静态的,一些实现是非静态的。

有人说这取决于“风格”或“品味”,有人说不是。
维基百科说它应该是非静态的,http://www.dofactory.com/Patterns/PatternFactory.aspx根据四人帮的说法,它还说它应该是非静态的。

我的问题是:它是否取决于风格和品味,或者如果它以静态方式实现,它是否违反了工厂模式?什么是对的?

最佳答案

我很犹豫将“实例与静态”归类为品味问题。这意味着它的美学就像最喜欢的颜色,或者更恰本地说,camelCase 与 PascalCase。

实例与静态更多的是权衡问题。使用任何类型的实例成员,您都可以获得多态性的所有好处,因为当您拥有实例和实例成员时,您可以实现接口(interface)并从其他类继承。使用静力学,您不会获得这些好处。通常,静态与实例是前期简单性与下游简单性的权衡。静态很容易,因为它们是全局可访问的,您不必考虑诸如“何时应该实例化它以及由谁实例化?”之类的事情。您不必使用访问器/修改器或构造器传递它们,并且您的 API 看起来更干净。这使得前期推理更容易。但是,它使维护和 future 的实现变得更加困难。

如果你有一个静态方法——比如说你的工厂方法——然后你希望它在某些情况下表现得不同,那你就有点受不了了。您必须创建第二种方法并复制并粘贴功能减去您想要更改的任何内容,然后让客户弄清楚。或者,更糟糕的是,您公开了一个全局变量,并让客户在使用您的方法之前和之后设置它,而全局变量告诉方法如何表现。

如果您已经预先设置了实例路线,这将很容易。您只需继承和覆盖您的初始工厂方法,并在您需要新功能的地方提供派生类。您不会给客户端代码增加额外的负担,并且您几乎不会对现有类进行任何修改(开放/封闭原则)。

我的建议是帮助 future 的您和/或其他维护人员并使用实例实现。这与四人帮或其他任何人想要或喜欢什么无关——这关乎你自己面对代码腐烂时的理智。

关于design-patterns - 工厂模式 - CreateInstance 是否静态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7908324/

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