3

我有一个有一些方法的类,我在代码中使用这些方法。他们的目标是生成一个对象并将其返回以供进一步使用。我可以通过两种方式实现它。第一种方法 - 将其设为静态,如下所示:

public static class Builder
{
    public static MyObject BuildMyObject(Settings myEnumSetting, int someParam)
    {
        //Building object 
        return MyObject;
    }

    //Other methods          
}

其他方式 - 是让它像这样实例:

public class Builder
{
    public MyObject BuildMyObject(Settings myEnumSetting, int someParam)
    {
        //Building object 
        return MyObject;
    }

    //Other methods          
}

第一种方式可以像这样创建我的对象:

MyObject obj = Builder.BuildMyObject(Settings.Worker,20);

在第二种情况下,我可以像这样使用它:

MyObject obj = new Builder().BuildMyObject(Settings.Worker,20);

这些方法中哪一种更有效?

4

5 回答 5

5

这些方法中哪一种更有效?

这取决于您的要求,如果您的类的唯一职责是创建一个对象并返回它,那么static类的第一个选项会更好。

于 2013-05-24T07:20:37.343 回答
4

使用静态方法更简单。为构建器的继承层次结构打开了一个实例方法,您可以在其中使用某种依赖注入来选择要使用的构建器。

如果静态方法有效 - 现在使用它。您始终可以将静态方法转换为外观,以便稍后隐藏继承的构建器类的层次结构的详细信息。

顺便说一句:我会使用名称Factory而不是Builder因为这是工厂方法模式实现的示例。Builder 是另一种(更复杂的)模式。

于 2013-05-24T07:22:31.737 回答
4

您描述的概念称为工厂模式。通常,构建器不使用任何实例成员,因此它应该是静态的。

当成员有凝聚力时( http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29 )应该使用实例,例如在同一组实例变量(字段)上操作的方法属于一个实例。

于 2013-05-24T07:24:42.293 回答
1

如果这个类只返回一个新对象,那么我认为静态方式更好,因为你没有在那个类或其他东西中存储数据。

所以静态方式比其他方式更有效。(例如,我认为创建 10 个此类的对象没有用处)

您的课程是工厂课程/模式

于 2013-05-24T07:24:44.667 回答
0

静态(工厂)类的优点是,您可以跟踪在某些静态属性中创建的对象。根据您的要求,这可能非常有用。

于 2013-05-24T07:27:39.590 回答