扩展静态工厂方法模式

时间:2013-09-03 19:56:00

标签: java design-patterns factory

我有一个现有的代码库,它使用静态Factory Method设计来实例化某些对象类型:

public static Something createSomething(int x, int y, .....)
{
    // creates a Something object
}

我想扩展这个方法,允许它以不同的方式初始化Something对象,基于将决定如何创建对象的新参数。

最简单(也是最不可扩展)的方法是将新参数添加到工厂方法中。

这似乎不是正确的做事方式:

  1. 需要更新多个工厂方法,而不仅仅是一个。
  2. 创建新方法会强制更改调用工厂的客户端代码。这种方法违背了生成对象的单一位置的目的。
  3. 添加更多参数会导致不易使用的长参数列表。
  4. 是否有更好的方法来扩展工厂方法?

1 个答案:

答案 0 :(得分:2)

创建一个新方法,并使用参数对象作为参数(Is this a named pattern?)。这样,您就不会更改以前的实现,并且您可以使用任何新实现(更改参数对象而不影响当前对方法的现有调用)。

其他想法:是的,这样,你有两种方法,但如果你做得对,那不是问题:

public static Something createSomething(int x, int y, .....)
{
    /// 1. Implementation
    /// OR
    /// 2. return createSomething(new SomethingDescription(parameters ...));
}

public static Something createSomething(SomethingDescription description)
{
    /// 1. return createSomething(description.x, description.y, ...);
    /// OR
    /// 2. Implementation
}

但是如果对象真的很复杂,而且可以通过很多方式构建,那么你应该按照Sotirios Delimanolis的建议切换到Builder模式。