java - 扩展静态工厂方法模式

标签 java design-patterns factory

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

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

我想扩展此方法,允许它根据指示如何创建对象的新参数,以不同的方式初始化 Something 对象。

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

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

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

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

最佳答案

创建一个新方法,并使用参数对象作为参数 ( 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
}

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

关于java - 扩展静态工厂方法模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18600454/

相关文章:

java - Java中如何检查变量是否已初始化?

jquery - 使用 JavaScript 创建可重用的小部件

java - 类路径或引导类路径中的 Gradle + Retrolambda : Fatal Error: Unable to find package java. lang

java - CXF 通话时长记录

java - MOXy 解码不容忍 dateTime 之前的空格

c# - 在库中解析期间引发错误/警告的模式

java - Java 中的 MVVM 模式

matlab - 如何在 MATLAB 中正确实现工厂模式?

c++ - 通过 operator new 定义简单对象工厂的正确语法

c++ - 基本构造函数根据输入调用派生的构造函数-在运行时选择对象子类型