我在想一个装载机类,并提出了两种不同的方法。
class Loader{
public:
Loader(const Path& path);
File load() const;
private:
Path path_;
};
VS
class Loader{
public:
Loader();
File load(const Path& path) const;
};
使用第一种方法,每个文件需要一个Loader,而Loader类代表一个状态。使用第二个,我可以使用一个加载器类加载不同的文件。 除了这些显而易见的差异,你会选择哪种方法,为什么还是有第三种可能是优越的方式?
答案 0 :(得分:2)
还有其他方法。
如果在加载文件时没有在Loader
类中维护任何状态,那么你可以简单地编写一个自由函数
File load(const Path& path); //a free function.
如果您希望它成为成员函数
,您可以创建函数static
class Loader{
public:
static File load(const Path& path);
};
//usage
Loader::load(path);
有时这样的解决方案完全取决于具体情况,有时取决于公司/程序员的个人偏好和品味。没有一个最好的解决方案!
您甚至可以选择在load
类本身中编写File
函数:
class File {
public:
bool load(const Path& path); //non-static, or/and the next one!
static File load(const Path& path); //static
};
在此,也许,您可能想要更改该函数的名称:open()
似乎比load()
更好。
答案 1 :(得分:1)
这取决于何时知道path
信息。如果是你在一个类中有一个Loader
成员,但是当你调用该类的构造函数时,你不需要知道路径,你需要做第二种方法。如果您确实知道路径,那么第一种方法可能会更好。
一般来说,这不是一个适合所有人的问题。
答案 2 :(得分:0)
这取决于您在应用程序中的需求。你以后需要这个州吗?或者将初始化的加载器传递到其他地方以进行实际加载?那你可能需要这个州。否则不会。
没有一般的“最佳”解决方案。