在这种情况下应使用哪种设计模式?

yicepeh969

我有一个名为的类,该类DS可以(1)从文件中读取数据并从头开始构建数据结构,或(2)从文件中读取预构建的数据结构。我最初写道:

class DS 
{
    DS(std::string file_name, bool type);
}

file_name要读取的文件在哪里,并type指定我们正在读取的内容,数据或预构建的数据结构。就我而言,这种方法不是很优雅。我还尝试了以下方法:

class DS 
{
    DS(std::string file_name);
    void CreateFromData();
    void ReadExisting();
}

但是由于一旦建立便不允许修改,所以我不希望用户先调用CreateFromData,然后再调用ReadExisting

是否有一些设计模式可以解决此问题?

乐园

如果构造函数签名的语义不够充分,请使用静态工厂函数。无需花哨。

class DS {
private:
    enum class Source { FromExisting, FromData };
    DS(const std::string& path, Source type);

public:
    static DS ReadExisting(const std::string& path) {
        return DS(path, Source::FromExisting);
    }
    static DS CreateFromData(const std::string& path) {
        return DS(path, Source::FromData);
    }
};

/* ... */

DS myData = DS::ReadExisting("...");

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章