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

r15*_*abh 4 java constructor design-patterns

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

axt*_*avt 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(...);
Run Code Online (Sandbox Code Playgroud)

如果类型不同,则可以将工厂方法设为静态,并将Y作为参数传递.