![]() |
1
2
在我看来,最简单的方法就是在访问者界面上有多个方法,每种类型的子对象有一个方法。孩子们是否是同一种语言类型并不重要,如果他们在语义上不同,他们应该用不同的方法来处理。 您还应该尽量避免用visible结构的细节来污染Visitor实现。为了做到这一点,我将accept方法移到visible接口中,而不是在该接口上公开childA和childB。然后Visitable的每个实现可以决定为每个子级调用访问器上的哪个方法。这将向访问者传达所有“位置”上下文,并为您提供一个好的、干净的、解耦的解决方案。 这是我思考的一个例子。同样,我已经将方法名替换回我习惯的名称。
现在您将看到一个Visitor的实现,它有两种不同的方法,一种用于处理A子级,另一种用于处理B子级。 |
![]() |
2
0
基于你的架构,你应该打电话给
另外,考虑一下
|
![]() |
3
0
从中的答案中提供以下附加信息 a background question
我的回答是:创建一个特殊的IVisitor类,可能称为ABChildVisitor,它有一个Visit()方法,知道如何遍历AChild和BChild。 |
|
user7794336 · Java中从列表路由方法调用的最佳方法 7 年前 |
![]() |
ivme · 用c语言构建封装但可扩展的动画库++ 7 年前 |
![]() |
zar · 与访问者的复合模式,访问者中的真正内容是什么? 9 年前 |
![]() |
Thomas Matthews · 使用模板解析虚拟方法 10 年前 |
![]() |
user35443 · 访问者模式-接口与抽象类 11 年前 |
![]() |
zpavlinovic · OCaml访问者模式 11 年前 |
![]() |
user1406062 · 访问者设计模式中的循环依赖[关闭] 12 年前 |
![]() |
jbcoe · 访问接口的私有继承如何允许可访问对象访问访问私有访问实现? 12 年前 |