我有一个类有一些方法,我在代码中使用它。他们的目标是生成一个对象并将其返回以供进一步使用。我可以用两种方式实现它。第一种方法 - 将其设为静态,如下所示:
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);
哪种方法更有效?
答案 0 :(得分:5)
哪种方法更有效?
这取决于您的要求,如果您的类的唯一责任是创建一个对象并返回它,那么static
类的第一个选项会更好。
答案 1 :(得分:4)
使用静态方法更简单。实例方法为构建器的继承层次结构打开,您可以使用某种依赖注入来选择要使用的构建器。
如果静态方法有效 - 现在就使用它。您始终可以将静态方法转换为外观,以便稍后隐藏继承的构建器类的层次结构的详细信息。
顺便说一句:我使用名称Factory
而不是Builder
,因为这是工厂方法模式实现的一个示例。 Builder是另一种(更复杂的)模式。
答案 2 :(得分:4)
您描述的概念称为工厂模式。 通常,构建器不使用任何实例成员,因此它应该是静态的。
当成员的凝聚力(http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29)时,应该使用实例,例如,在同一组实例变量(字段)上运行的方法属于一个实例。
答案 3 :(得分:1)
如果这个类只返回一个新对象,那么我会认为静态方式更好,因为你没有在该类或其他东西中存储数据。
因此静态方式比另一方式更有效。 (例如,我不认为创建此类的10个对象会很有用)
您的班级是工厂类/模式
答案 4 :(得分:0)
静态(工厂)类的优点是,您可以跟踪在某些静态属性中创建的对象。根据您的要求,这可能非常有用。