我有一个使用静态 Factory Method 的现有代码库实例化某些对象类型的设计:
public static Something createSomething(int x, int y, .....)
{
// creates a Something object
}
我想扩展此方法,允许它根据指示如何创建对象的新参数,以不同的方式初始化 Something 对象。
最简单(且可扩展性最差)的方法是向工厂方法添加新参数。
这似乎不是正确的做事方式:
- 有不止 1 个工厂方法需要更新,而不仅仅是一个。
- 创建新方法将强制更改调用工厂的客户端代码。这违背了使用单一位置生成对象的目的。
- 添加更多参数会导致参数列表过长,不方便使用。
是否有更好的方法来扩展工厂方法?
最佳答案
创建一个新方法,并使用参数对象作为参数 ( 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/