Bab*_*ish 5 c++ oop std factory-pattern
在C#中,您必须在类中声明所有内容,因此示例工厂模式可能如下所示:
namespace MySpace {
public class CFactory
{
public static CFactory Current()
{
static CFactory singleton;
return singleton;
}
public CBase Create() { return null; }
}
}
Run Code Online (Sandbox Code Playgroud)
在C++中,你没有这个限制.所以将"工厂"方法作为全局函数而不是让它们成为一个类被认为是"不好的做法"?
例1:
namespace MySpace {
// factory method
std::shared_ptr<CBase> CreateBase() { return NULL; }
}
Run Code Online (Sandbox Code Playgroud)
例2:
namespace MySpace {
// factory class
class CFactory
{
public:
std::shared_ptr<CBase> CreateBase() { return NULL; }
};
// factory method exposing class
CFactory& GetFactory()
{
static CFactory singleton;
return singleton;
}
}
Run Code Online (Sandbox Code Playgroud)
例3:
namespace MySpace {
// factory class with no global function
class CFactory
{
public:
std::shared_ptr<CBase> CreateBase() { return NULL; }
public:
static CFactory& getFactory()
{
static CFactory singleton;
return singleton;
}
};
}
Run Code Online (Sandbox Code Playgroud)
std库为"工厂方法"使用了很多全局函数.这个例子就是std :: make_shared.
我之前使用过这两种情况,但我不确定一种情况是否会被认为是"更好"
您可以从标准库中的用法推测命名空间全局工厂并不是隐式错误的。没有什么可以阻止它是正确的。
将工厂包装在类中的方法是一种组织变革。组织本身没有好坏之分。它可以做得好,也可以做得不好。
您应该可以采用适合其上下文的任何方法。我也看到这两种方法被多次使用,但都不是特别有问题。