参考数据 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 方法吗?
好吧,既然这是一个设计问题,我就用不同的方式来考虑它。不完全了解你的局限性,这是我的建议:
- 使用适当的 getter 和 setter 方法将 DataStore 和 visitorData 分开 class。如果可以,请取消旧数据类型。
将 xyz class 转换为单例并使用适当的方法使其成为访问器 class。
因此,您从 IVisitor 派生的实用程序 class 将获取单例实例,而单例将依次为您获取数据。
因此它将实现OOD所期望的高级抽象。
我刚刚给出了一个想法的框架,你需要了解细节。
希望对您有所帮助
我有一个容器 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 方法吗?
好吧,既然这是一个设计问题,我就用不同的方式来考虑它。不完全了解你的局限性,这是我的建议:
- 使用适当的 getter 和 setter 方法将 DataStore 和 visitorData 分开 class。如果可以,请取消旧数据类型。
将 xyz class 转换为单例并使用适当的方法使其成为访问器 class。
因此,您从 IVisitor 派生的实用程序 class 将获取单例实例,而单例将依次为您获取数据。
因此它将实现OOD所期望的高级抽象。
我刚刚给出了一个想法的框架,你需要了解细节。
希望对您有所帮助