我必须使用对象Y的属性(两者都是相同类型)以4-5种不同方式创建对象X,即根据情况,Y的那些属性可用于以不同方式初始化X.一种方法是,使用默认构造函数创建一个对象X,然后设置它的属性,但它有一个缺点,即如果出现一些问题,那么我们有一个处于不一致状态的对象。另一种方法是使用虚拟参数为所有情况创建不同的构造函数,这听起来非常糟糕。 我可以在这里使用任何好的设计模式吗?
答案 0 :(得分:6)
如果两个对象的类型相同,则可以使用工厂方法:
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作为参数传递。
答案 1 :(得分:3)
听起来你可以使用Factory Pattern稍微专业的版本。例如。构建对象的一部分可能是将现有实例(或实例的接口)传入初始化新对象。
答案 2 :(得分:2)
可以找到工厂模式的好解释here Joshua Bloch也是他的书,Effective Java提出了使用静态工厂的一些好处
答案 3 :(得分:0)
除工厂模式外,请查看Builder Pattern。此模式允许客户端配置对象的构造方式。
答案 4 :(得分:0)
这听起来像Abstract Factory模式的情况。