参考数据 class 会员访客模式

reference data class member visitor pattern

我有一个容器 class,它有一个名为 DataStore 的普通旧数据类型。 此数据存储将传递给 visitor.They 共享一个副本,因为访问者可以看到容器执行的任何更新。

class xyz
{
    //Plain Old Datatype
    typedef struct DataStore
    {
        //add any new required data by any test here
        bool    _detectorConnectionStatus;
        DataStore():_detectorConnectionStatus(false){}
    }DataStore;

    DataStore _dataStore;

    typedef struct visitorData
    {
        DataStore& dataStore;
        visitorData(DataStore data):dataStore(data){}
    }visitorData;

    //data to be sent to visitor
    visitorData _visitorData;
};

xyz::xyz():_visitorData(_dataStore)
{
}

class IVisitor
{
private:
struct DataStore* dataStore;
public:
//get the data,no check for validity of data performed
 void visit(struct DataStore& dataStore){};
//process the data
virtual void process() = 0;
};

代码可以编译,但是有 better/cleaner 方法吗?

好吧,既然这是一个设计问题,我就用不同的方式来考虑它。不完全了解你的局限性,这是我的建议:

  1. 使用适当的 getter 和 setter 方法将 DataStore 和 visitorData 分开 class。如果可以,请取消旧数据类型。
  2. 将 xyz class 转换为单例并使用适当的方法使其成为访问器 class。

  3. 因此,您从 IVisitor 派生的实用程序 class 将获取单例实例,而单例将依次为您获取数据。

因此它将实现OOD所期望的高级抽象。

我刚刚给出了一个想法的框架,你需要了解细节。

希望对您有所帮助