工厂方法:
大家好。我正在寻找简单工厂方法和工厂方法之间的区别。我知道结构上的区别(如上图所示),但我无法理解用例中的区别。例如,这是工厂方法的说明:
在Factory Method模式中,我们将引入一个名为 “ IMobileFactory”和两个具体的实现“ NokiaFactory”以及 “ IphoneFactory”。这些具体的类控制对象的创建。
在我的示例中,客户端需要诺基亚对象。所以给出了步骤 在下面。
1。客户端将加载对“ NokiaFactory”的引用。但是客户不会像简单工厂那样直接引用“ NokiaFactory”类 图案。客户通过 界面“ IMobileFactory”。
2。然后,客户端调用“ CreateMobile()”方法,该方法将返回“ IMobile”类型的对象。
3。在这里,我们必须通过一些配置或参数来通知客户端要使用的具体实现。
我不明白第一步:
但是客户不会像这样直接引用“ NokiaFactory”类 简单的工厂模式。客户参考具体实施 通过界面“ IMobileFactory”。
因此客户端编写如下内容:
IMobileFactory factory = LoadFactory("NokiaFactory");
那为什么有用并且更好?有什么好处?为什么我不应该这样写:
NokiaFactory factory = new NokiaFactory();
或者那样:
IMobileFactory factory = new NokiaFactory();
答案 0 :(得分:2)
您需要使用界面以避免每种类型创建不同的流,对于10种类型,您将拥有1行代码,而不是10行
IMobileFactory factory = loadFactory(myFactoryName);
代替每种类型:
NokiaFactory factory = new NokiaFactory();
...
IphoneFactory factory = new IphoneFactory();
...
将loadFactory
方法用于new NokiaFactory()
的区别在于,您无需显式创建新对象,而将对象创建委托给loadFactory
即可返回相关对象
答案 1 :(得分:2)
所以您的问题是关于比较设计1:
IMobileFactory factory = LoadFactory("NokiaFactory");
此设计2:
NokiaFactory factory = new NokiaFactory(); // or:
IMobileFactory factory = new NokiaFactory();
您看到的最大区别是,虽然设计#1中的客户端不不知道任何具体类型,例如NokiaFactory
或IPhoneFactory
,但客户端设计#2可以做到。
了解诸如NokiaFactory
或IPhoneFactory
之类的具体事物的弊端应该是众所周知的。例如,如果要更改这些类型,则想向NokiaFactory
添加一个新方法,而该方法不是IMobileFactory
界面的一部分,那么客户端代码将受到影响<强烈>不必要。客户端不关心新方法,但是必须重新编译/重新部署其代码。
要解释更多。
例如,将名为Foo
的新方法添加到NokiaFactory
类中:
class NokiaFactory {
// old code
public void Foo() { ... }
}
Foo
不是IMobileFactory
界面的方法,而是将其添加到NokiaFactory
,因为还有另一个客户端需要该方法,并且该客户端很乐意依赖{{ 1}}类。换句话说,该客户端将欢迎NokiaFactory
类的更改,但第一个客户端则不会。
答案 2 :(得分:0)
从设计的角度来看:
当对象类型不固定时,请使用SimpleFactory。例如:给我的制造商打电话-诺基亚,iPhone。也许您明天想添加新的制造商。
在固定对象类型时使用Factory方法。例如:按类型的电话-固定电话和移动电话。
最后,这取决于您如何设计系统。您想扩展的内容。