我目前正在尝试实现工厂设计模式,但对 C++ 中通常如何实现这一点有些困惑。我一直在指this网页。
因此,在该网页上,他们展示了一个示例,其中定义了一个名为 ComputerFactory 的工厂类。该类有一个静态的 NewComputer 方法。
class ComputerFactory
{
public:
static Computer *NewComputer(const std::string &description)
{
if(description == "laptop")
return new Laptop;
if(description == "desktop")
return new Desktop;
return NULL;
}
};
NewComputer 是静态的这一事实意味着它不与 ComputerFactory 的单个实例关联。因此,可以通过编写代码从代码中调用此方法
ComputerFactor::NewComputer("description");
现在我很好奇为什么需要将其包装在一个类中。因为它是静态的并且实际上并不意味着与任何类关联,所以做类似的事情会更有意义
namespace ComputerFactory
{
static Computer *NewComputer(const std::string &description)
{
if(description == "laptop")
return new Laptop;
if(description == "desktop")
return new Desktop;
return NULL;
}
}
所以我的问题:
- 我描述的命名空间函数是有效的替代方案吗?
- 定义一个仅具有静态方法的类是否有意义?看起来使用命名空间更有意义。
现在我相信在某些情况下使用静态方法是有意义的(例如静态“当前存在多少个此类”),但这似乎不是必要的情况。有什么想法吗?
编辑:所以我只是有一个想法,我列出的示例不是“典型”工厂方法。在实践中,工厂函数可能更复杂并且需要调用其他函数(私有(private)类方法)。在这种情况下,将工厂包装到一个类中以便您可以访问子函数是完全有意义的。这就是工厂方法通常被包装到类中的原因吗?
最佳答案
Is the namespace function I described a valid alternative?
是的
Would it ever make sense to define a class that only has static methods? It seems like it would make more sense to use a namespace.
如果这些方法是可以在许多类中使用的实用方法,那么将它们放在命名空间
中会更有意义。
如果这些方法是特定于类的,那么将它们设置为类本身的静态
,这样可以实现更好的封装。
关于c++ - 何时使用静态类函数而不是命名空间函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40966089/