我有一个容器类,它有一个名为DataStore的普通旧数据类型。 此数据存储将传递给访问者。他们共享一个副本,因为访问者可以看到容器执行的任何更新。
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;
};
代码编译但有更好/更清晰的方法吗?
答案 0 :(得分:0)
好了,因为它是一个设计问题,我以不同的方式想到了它。完全不了解你的限制,这是我的建议:
将xyz类转换为单例,并使用适当的方法使其成为一个访问者类。
因此,从IVisitor派生的实用程序类将获取单例实例,而singleton将为您获取数据。
因此,它将按照OOD的预期实现高级抽象。
我刚刚提出了一个想法的框架,你需要弄清楚细节。
希望这有帮助