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

发布于 2024-11-06 14:25:49 字数 200 浏览 1 评论 0原文

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

I have to create an object X using properties of object Y (both are of same type) in 4-5 different ways i.e. depending upon situation, those properties of Y can be used to initialize X in different ways. One way to do is , create an object X using default constructor and then set its properties, but it has a disadvantage that if some problem occurs then we have an object in inconsistent state. Another way to do is create different constructors for all the cases with dummy parameters, which sounds really bad.
Is there any good design pattern i can use here ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

执笔绘流年 2024-11-13 14:25:49

如果两个对象的类型相同,则可以使用工厂方法:

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 作为参数。

If both objects are of the same type, you can use factory methods:

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(...);

If types are different, you can make factory methods static and pass Y as a parameter.

满天都是小星星 2024-11-13 14:25:49

听起来您可以使用工厂模式的稍微专业化的版本。例如,构建对象的一部分可能是传入现有实例(或实例的接口)来初始化新对象。

Sounds like you could use a slightly-specialized version of the Factory Pattern. E.g. Part of building an object could be to pass in an existing instance (or interface to an instance) to initialize a new object.

葬﹪忆之殇 2024-11-13 14:25:49

可以找到有关工厂模式的详细解释 此处
Joshua Bloch 在他的书《Effective Java》中也提出了使用静态工厂的一些好处

Nice explanation for Factory Pattern can be found here.
Also Joshua Bloch is his book Effective Java suggests some good advantages of using static factories

时间你老了 2024-11-13 14:25:49

这听起来像是抽象工厂模式的例子。

This sounds like a case for the Abstract Factory pattern.

后来的我们 2024-11-13 14:25:49

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

In addition to Factory Pattern, take a look at the Builder Pattern. This pattern allows the client to configure how an object is constructed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文