简单工厂:

工厂方法:

大家好。我在寻找简单工厂和工厂方法之间的区别。我知道结构上的差异(上图),但我无法理解用例中的差异。例如,这是对工厂方法的解释:
在工厂方法模式中,我们将介绍一个名为“IMobileFactory”的新接口和两个具体实现的‘NokiaFactory’和‘IphoneFactory’。这些具体的类控制对象的创建。 在我的示例中,客户端需要一个Nokia对象。下面给出了这些步骤。 1.客户端将加载对“NokiaFactory”的引用。但是客户端不会像简单工厂模式那样直接引用‘NokiaFactory’类。客户端通过接口“IMobileFactory”引用具体实现。 2.然后客户端调用‘CreateMobile()’方法,该方法将返回一个类型为‘IMobile’的对象。 3.在这里,我们必须通知客户通过某些配置或参数使用的具体实现。
我不明白第一步:
但是客户端不会像简单工厂模式那样直接引用‘NokiaFactory’类。客户端通过接口“IMobileFactory”引用具体实现。
所以客户端写了这样的东西:
IMobileFactory factory = LoadFactory("NokiaFactory");那为什么这样更有用更好呢?有什么好处?为什么我不直接写这个
NokiaFactory factory = new NokiaFactory();那又如何呢:
IMobileFactory factory = new NokiaFactory();发布于 2018-11-19 10:35:40
所以你的问题是比较一下这个设计#1:
IMobileFactory factory = LoadFactory("NokiaFactory");对于这个设计#2:
NokiaFactory factory = new NokiaFactory(); // or:
IMobileFactory factory = new NokiaFactory();正如您所看到的,最大的区别是,虽然设计#1中的客户机不知道而不是知道任何具体类型,比如NokiaFactory或IPhoneFactory,但是设计#2中的客户机知道。
了解NokiaFactory或IPhoneFactory这样的具体事物的缺点应该众所周知。如果您想对这些类型进行更改,例如,您希望向unnecessarily.中添加一个新方法,并且此方法不是IMobileFactory接口的一部分,则客户端代码将受到影响。客户端不关心新方法,但它的代码必须重新编译/重新部署。
更新
来解释更多。
例如,将名为Foo的新方法添加到NokiaFactory类中:
class NokiaFactory {
// old code
public void Foo() { ... }
}Foo不是IMobileFactory接口的方法,但它被添加到NokiaFactory中,因为还有另一个客户端需要该方法,而且该客户端很乐意依赖于NokiaFactory类。换句话说,该客户端将欢迎来自NokiaFactory类的更改,但第一个客户机不会。
发布于 2018-11-19 11:12:21
从设计角度看:
最后,这取决于您希望如何设计您的系统。你想要扩展的东西。
发布于 2018-11-19 10:10:55
您需要接口以避免每种类型创建不同的流,对于10种类型,您将有1行代码,而不是10行代码。
IMobileFactory factory = loadFactory(myFactoryName);而不是每种类型:
NokiaFactory factory = new NokiaFactory();
...
IphoneFactory factory = new IphoneFactory();
...将loadFactory方法用于new NokiaFactory()的区别在于,不需要显式创建新对象,而是将创建对象委托给返回相关对象的loadFactory
https://stackoverflow.com/questions/53372254
复制相似问题