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