用于以不同方式从另一个对象创建对象的设计模式

时间:2011-05-10 17:49:13

标签: java design-patterns constructor

我必须使用对象Y的属性(两者都是相同类型)以4-5种不同方式创建对象X,即根据情况,Y的那些属性可用于以不同方式初始化X.一种方法是,使用默认构造函数创建一个对象X,然后设置它的属性,但它有一个缺点,即如果出现一些问题,那么我们有一个处于不一致状态的对象。另一种方法是使用虚拟参数为所有情况创建不同的构造函数,这听起来非常糟糕。 我可以在这里使用任何好的设计模式吗?

5 个答案:

答案 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模式的情况。