面向对象编程:是否有另一种创建对象的方法

时间:2016-06-17 07:16:13

标签: oop code-readability code-design

您认为在良好的编码方面哪个更好。

当我创建一个对象时,我将使用new关键字来创建该类的实例。

var objA = new A()

如果我通过在A类中创建静态方法名称CreateA来创建对象,并通过调用CreateNewA或CreateInstance而不是新的A()来创建A的对象。

var objA = A.CreateNewA() instead of var objA = new A().

A.CreateNewA()会使代码更具可读性。这样做的缺点是我必须创建一个名为CreateNewA的静态方法。

2 个答案:

答案 0 :(得分:0)

我认为A.CreateNewA()不需要。

使用“new”关键字创建新实例更易读,更易于理解。

使用“new”关键字也允许我们将初始值传递给构造函数类,例如,

const studentA = new Student('firstname', 'lastname')

答案 1 :(得分:0)

正如其他人已在评论中提到的那样,您在第二个代码示例中显示的是一个众所周知的设计模式,称为“工厂方法”。

在您的具体示例中,与使用new直接调用构造函数相比,它没有任何明显的好处。你仍然需要一个构造函数,你只需要在静态方法中调用它,你就可以将其设置为私有。

如果您不知道要在编译时创建的对象的类,则工厂方法确实有意义。与构造函数不同,工厂方法不仅可以返回类A的对象,还可以返回从A派生的任何类的对象。

使用工厂方法的主要原因是将对象创建与其余程序逻辑分开,这有利于分离关注点。当然,这是以必须编写(和读取)其他代码为代价的。