当建模类时,首选的初始化方式是什么:
构造函数,或者
工厂方法
使用它们的考虑是什么?
在某些情况下,我更喜欢有一个工厂方法,如果对象不能被构造,它就返回null。这使得代码整洁。在采取替代操作之前,我可以简单地检查返回值是否不为空,而不是从构造函数抛出异常。(我个人不喜欢例外)
比如说,我在一个类上有一个构造函数,它需要一个id值。构造函数使用这个值从数据库填充类。如果指定id的记录不存在,构造函数抛出RecordNotFoundException异常。在这种情况下,我将不得不在一个try. catch块中包含所有此类类的构造。
与此相反,我可以在那些类上有一个静态工厂方法,如果没有找到记录将返回null。
在这种情况下,哪种方法更好,构造函数方法还是工厂方法?
除了“有效的java”(在另一个答案中提到),另一本经典书也建议:
首选静态工厂方法(具有描述参数的名称)而不是重载构造函数。
如。不要写
Complex complex = new Complex(23.0);
而是写
Complex complex = Complex.fromRealNumber(23.0);
这本书甚至建议将Complex(float)构造函数设为私有,以强制用户调用静态工厂方法。
除了“有效的java”(在另一个答案中提到),另一本经典书也建议:
首选静态工厂方法(具有描述参数的名称)而不是重载构造函数。
如。不要写
Complex complex = new Complex(23.0);
而是写
Complex complex = Complex.fromRealNumber(23.0);
这本书甚至建议将Complex(float)构造函数设为私有,以强制用户调用静态工厂方法。