gpt4 book ai didi

c++ - C++中正确的工厂模式

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:49 25 4
gpt4 key购买 nike

在 C# 中,您必须在类中声明所有内容,因此示例工厂模式如下所示:

namespace MySpace {

public class CFactory
{
public static CFactory Current()
{
static CFactory singleton;
return singleton;
}
public CBase Create() { return null; }
}

}

在 C++ 中没有这个限制。那么将“工厂”方法作为全局函数与将它们作为一个类是否被认为是“不好的做法”?

示例 1:

namespace MySpace {

// factory method
std::shared_ptr<CBase> CreateBase() { return NULL; }

}

示例 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;
}

}

示例 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;
}
};

}

std 库为“工厂方法”使用了很多全局函数。一个例子是 std::make_shared。

我以前都用过,只是不确定是否认为一个比另一个“更好”

最佳答案

您可以根据它在标准库中的用法来推测命名空间全局工厂不是隐式错误的。没有什么能阻止它是正确的。

您将工厂包装在一个类中的方法是组织的改变。组织本身既不好也不坏。它可以做得好也可以做得不好。

您应该可以采用适合其上下文的任何方法。我也看到这两种方法被多次使用,但都没有特别的问题。

关于c++ - C++中正确的工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4830678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com