我偶尔会看到的模式是这样的:
public class JustAnotherClass
{
private JustAnotherClass()
{
// do something
}
static JustAnotherClass GetNewClass()
{
return new JustAnotherClass();
}
}
为什么这会比仅仅拥有一个公共构造函数更有优势呢?
答案 0 :(得分:4)
为什么这会比仅仅拥有一个公共构造函数更有优势呢?
这是一种工厂模式。您可以在这些实例中创建一个点。
优势在于,在将来的扩展中,您可以添加逻辑,例如返回派生类实例。或者在某些条件下返回null
。构造函数无法返回null
。
答案 1 :(得分:0)
我认为只使用static
方法创建新对象没有任何优势。它直接调用构造函数或多或少是等价的。
它使代码更具可扩展性,这是公共构造函数无法实现的。检查Henk holterman的答案。
答案 2 :(得分:0)
我最近的一个项目的一个例子:我有一个代表非对称密钥对的类。构造函数受到保护,有两种工厂方法:FromPrivateKey(byte[])
和GenerateIdentity()
。 IMO使消费代码更易于阅读。
答案 3 :(得分:0)
好问题。您显示的类是工厂(请参阅工厂模式)。所以“为什么要使用工厂”......正如我所说的那样一个好问题。
对我来说,当我需要在运行时(很多次)创建实例时,我会使用工厂。为什么?因为它使我的代码更容易使用单元测试进行测试。这是对你问题的一个答案,如果你不对你的代码进行单元测试(也许是TDD)则无关紧要。这里没有错误或权利,只是一个事实。
要回答你的问题,请问'为什么要使用工厂'。
答案 4 :(得分:0)
除了灵活之外,如果要在构造函数中使用参数(至少是此行为)和XML序列化,则需要使用此方法。
答案 5 :(得分:0)
在你的例子中,没有真正的优势。如果要控制何时以及如何创建类的实例,可以使用工厂方法。一些例子:
File
类的两个实例。