我必须使用对象 Y 的属性(两者都属于同一类型)以 4-5 种不同的方式创建一个对象 X,即根据情况,Y 的这些属性可用于以不同的方式初始化 X。一种方法是 ,使用默认构造函数创建一个对象 X,然后设置其属性,但它有一个缺点,即如果出现问题,那么我们就会有一个处于不一致状态的对象。另一种方法是使用虚拟参数为所有情况创建不同的构造函数,这听起来真的很糟糕。我在这里可以使用任何好的设计模式吗?
如果两个对象属于同一类型,则可以使用工厂方法:
public class Foo {
...
public Foo withBar(...) {
Foo f = new Foo(this.param);
f.setBar(...);
return f;
}
public Foo withBaz(...) {
Foo f = new Foo(this.param);
f.setBaz(...);
return f;
}
}
...
Foo y = ...;
Foo x = y.withBar(...);
如果类型不同,则可以将工厂方法设为静态并将 Y 作为参数传递。
听起来你可以使用工厂模式的稍微专业版本。 例如,构建对象的一部分可能是传入现有实例(或实例的接口)以初始化新对象。
工厂模式的良好解释可以在这里找到.
此外,约书亚·布洛赫(Joshua Bloch)在他的书《Effective Java》中提出了使用静态工厂的一些好处
这听起来像是抽象工厂模式的一个案例。
除了工厂模式之外,还可以查看生成器模式。 此模式允许客户端配置对象的构造方式。