Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 访问者设计模式的实现_Design Patterns - Fatal编程技术网

Design patterns 访问者设计模式的实现

Design patterns 访问者设计模式的实现,design-patterns,Design Patterns,如何在不重新编译层次结构的情况下将成员添加到类的层次结构中? 假设层次结构是 LandTransport extends Transport Car extends LandTransport 我们需要将方法GetCapacity添加到层次结构中。如何使用访问者模式实现这一点?您的接口是在编译时定义的,因此在运行时是固定的。但您可以通过运行时多态性向现有类添加访问者模式的功能 只需创建两个接口,一个是visitable,另一个是visitor,将visitor传递给visitable对象并计算

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

LandTransport extends Transport
Car extends LandTransport

我们需要将方法GetCapacity添加到层次结构中。如何使用访问者模式实现这一点?

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

只需创建两个接口,一个是visitable,另一个是visitor,将visitor传递给visitable对象并计算内部的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 { } ...