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



我必须使用对象 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》中提出了使用静态工厂的一些好处

这听起来像是抽象工厂模式的一个案例。

除了工厂模式之外,还可以查看生成器模式。 此模式允许客户端配置对象的构造方式。

最新更新