实施访客设计模式

时间:2012-04-16 17:50:19

标签: design-patterns

如何在不重新编译层次结构的情况下将成员添加到类层次结构中? 假设层次结构是

LandTransport extends Transport
Car extends LandTransport

我们需要将方法GetCapacity添加到层次结构中。如何使用访客模式进行此操作?

1 个答案:

答案 0 :(得分:0)

您的接口是在编译时定义的,因此它在运行时已得到修复。但您可以通过运行时多态性向访问者模式添加现有类的功能。

只需创建两个可访问的接口和第二个访问者,将访问者传递给可访问对象并计算内部的GetCapacity逻辑。

实施例

class myClass;

class visitor {
virtual void handle(myClass cl);

}

class iVisitable {
 virtual void visit(visitor& v);
}



class myClass : public iVisitable{
  void visit(visitor& v){
   v.handle(this);
}
}

//Put getCapacity logic here and pass it to myClass
class getCapacityVisitor : iVisitor { } ...