![]() |
1
8
访问者模式允许您做一些事情,而仅仅依靠多态性是不行的:处理未预料到的用例。如果你正在写一个库,这是一个重要的一点。让我详细说明一下:
考虑使用visitor模式的一个经典示例,即对某些
abstract syntax
访问者模式将这个负担从客户机转移到库中。 |
![]() |
2
3
东西 在你不拥有的库中定义,你需要扩展它。比如:
多态性允许您定义可以对其执行操作的新对象:
缺点是使用visitor模式 成本 expression problem . visitor模式是一个很酷的模式,但是除了实现编译器之外,我从来没有发现对它的需要。 |
![]() |
3
2
|
![]() |
4
1
当我有一个对象树并且需要以多种方式打印内容时,我使用了visitor模式。逗号、XML等等。我没有为每个输出格式添加一个新的print方法,而是使用visitor模式并创建了CommaSepVisitor、XMLVisitor和HTMLVisitor类。树代码从来没有改变,因为我添加了更多的访问者类型,所以我从来没有引入错误。来访者本身很容易写作。 |