我使用的是据称使用Factory模式的java代码,但我并不完全相信这种模式。
我的代码是这样的:
// the factory
class SomeFactoryImpl {
   Set<SomeClass> getSomeListOfObjects();
}在代码中的某个地方:
{ ...
    SomeFactory factory = new SomeFactoryImpl();
    Set<SomeClass> list = factory.getSomeListOfObjects();
}我考虑的要点是,如果工厂类没有静态create()方法,那么就需要实例化一个工厂,而IMO应该和实例化对象本身一样复杂。
我不认为这样的工厂可以返回要生成的对象集合的论点是足够好的。我觉得如果在实际从工厂创建对象之前需要创建一个工厂实例,那么可以有更干净的解决方案。
我觉得如果创建方法是工厂类的静态方法,情况会更好。但我也确信,我的观点并不完全“正确”。
那么,So社区能给出一些示例,说明实例化Factory对象比使用静态创建方法更好吗?
另外,我遇到了一个类似的问题的答案,这个问题列出了这些链接和答案:所以我需要通过代码示例清楚地知道FactoryMethodPattern、FactoryMethod和CreationMethod之间的区别。
发布于 2009-06-22 11:31:15
使用工厂的实例将显示与依赖注入相结合的真正好处。
因此,在您的示例中,而不是:
{ ...
    SomeFactory factory = new SomeFactoryImpl();
    Set<SomeClass> list = factory.getSomeListOfObjects();
}你可能会:
public ThisClass(SomeFactory someFactory) {
    this.factory = someFactory;
}   然后以后..。
{ ...
    Set<SomeClass> list = factory.getSomeListOfObjects();
}以下几点:
我知道这只是你问题的一个子集..。
发布于 2009-06-22 10:39:46
我想,对象创建的静态方法是最流行的方法,但也有一些用例--首先创建工厂实例是有意义的。例如,如果您想将它与注册表结合起来(其中应该允许多个注册中心共存)。
此外,如果工厂依赖某些动态上下文信息(数据库连接,.)在我看来,最好让工厂实例来处理这件事。
发布于 2009-06-22 10:51:02
首先,你忘记了工厂模式的主要目的,我打开了“四人帮”的书,它说:
“定义用于创建objet的接口,但让子类决定要实例化哪个类。工厂方法允许类将实例化推迟到子类。”
这意味着您实际上定义了一个接口,因此SomeFactoryImpl应该实现在其他地方定义的接口。当您有许多需要实例化的对象,但您不想关心它们是哪种对象时,这是有用的。例如,我使用它们来开发一个远程swing应用程序,在这个应用程序中,客户端通过序列化下载了客户机VM中不存在的一些类的定义。每个类都定义了一个特定视图的JPanel子类,但是当到达客户端时,我不得不在不知道这些类的情况下找到一种方法来对这些类进行定位,所以我使用了一个工厂模式来调用工厂类,并让它实例化我的u为人对象(而且是扩展了由我定义的JPanel子类)。另一个例子是生成适合您需要的特定于案例的对象。例如(如与此设计模式相关的wikipedia页面中所述),您可以认为一个工厂构建对象,然后为同一类型对象构建另一个工厂,但用于生成“假对象”,这将导致某种单元测试失败。
但是,您也可以使用静态方法解决您的特定问题,但是可以考虑将从在大型项目中使用它们的部件中生成项的部分拆分。当然,开发客户端部件的人应该知道使用的是哪个工厂接口,并且只需要知道这一点就可以使用其他部分中定义的所有对象。
Creation是一种“方便”模式,只用于定义构造函数的自定义版本,而不用担心使用标准定义(方法的名称与类的名称相同),但它没有什么特殊之处。只是另一种方式来识别物体..。创建模式实际上并没有解决任何特定的问题(不包括具有相同数量和类型参数的构造函数)。
https://stackoverflow.com/questions/1026463
复制相似问题