|
|
1
2
在Java中,您可以考虑使用 visitor 将访问者对象传递到树中的每个节点的模式,该节点使 回拨 以确定应执行哪些行为。 这避免了任何强制转换或显式检查每个节点的类型。
|
|
|
2
2
访客设计模式是一个很好的解决方案。但是您必须考虑结构中可能发生的更改,例如,新的leaf类将使您实现applyVisitor,并将visit*方法添加到您创建的其他每个访问者中。所以访问者真的能帮助你以不经常改变的结构为代价向结构化对象添加行为。如果结构经常改变,算法也不太多,那么您可以考虑为具有相同接口的对象使用不同的复合。如果你想这样做 肮脏的 正如您目前在PHP中所做的那样,查看Java反射API。好的解决方案是imho动态调用(如Ruby或Python)。你可以模拟这些,但那会很有用…所以我的答案是小心使用访客,或者考虑不同行为对象的不同复合材料。 |