用访客模式对事件进行排序

时间:2014-03-26 16:31:59

标签: c++ design-patterns

我实施了访客模式,似乎工作正常,但我不知道如何在开始和结束时做一些家务工作。

无法保证何时会调用各种重载的visit()方法,因此我无法判断谁是第一个,谁是最后一个。

基本上我使用访问者来保存/加载磁盘设置。问题是(在加载时)我需要在执行任何其他加载步骤之前清除一些东西。我确实放入了一个静态变量和方法来初始化事物并做这个加载,这应该确保在一开始只发生一次事情 - 但是一个人可以多次加载东西。因此,在阅读结束时,我想重置静态变量(这样他们就可以再次读入,而旧的垃圾仍然存在)。我不能简单地将重置放入析构函数(或析构函数调用的方法),因为为每组设置创建/销毁了具体的访问者对象n次。

我想我需要用另一种模式来制作它,但我没有看到如何。

1 个答案:

答案 0 :(得分:1)

跟进我上面的评论。

你可以有一个班级

class VisitorState {
public:
    VisitorState() {
        // stuff to be done on loading
    }
    ~VisitorState() {
        // stuff to be done when done.
    }
 private:
    // state info you might want to keep around
 };

然后修改您的访问者界面以获得包含VisitorState

的方法
someReturn visit(VisitorState &state,....) 

当请求加载文件并保持与正在访问的文件关联时,必须分配VisitorState(new' ed)当处理(删除' d)时必须取消分配文件结束。