0

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

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

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

最简单(且可扩展性最低)的方法是向工厂方法添加新参数。

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

  1. 需要更新的工厂方法不止一种,而不仅仅是一种。
  2. 创建新方法将强制更改调用工厂的客户端代码。这种方式违背了使用单个位置生成对象的目的。
  3. 添加更多参数会导致参数列表过长,使用起来很不方便。

有没有更好的方法来扩展工厂方法?

4

1 回答 1

2

创建一个新方法,并使用参数对象作为参数(这是命名模式吗?)。这样,您不会更改以前的实现,并且您可以接受任何新的实现(您更改参数对象而不影响当前对方法的现有调用)。

额外的想法:是的,这样,你有两种方法,但如果你做对了,这不是问题:

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
}

但是,如果对象真的很复杂,并且可以通过多种方式构建,那么您应该切换到 Builder 模式,正如 Sotirios Delimanolis 所建议的那样。

于 2013-09-03T20:20:03.940 回答