第17章

  1. 访问者模式提供了一种,将算法的实现与它们所操作的对象分离开来的方法;换句话说,是一种在不修改类本身的情况下,通过编写新的非成员函数来为类添加操作的方式。
  2. 访问者模式允许扩展类型层次结构的功能。当类的源代码无法修改,或此类修改难以维护时,可以使用该模式。
  3. 双重分发是指根据两个因素来分派函数调用(选择要运行的算法)的过程。双重分发可以在运行时通过访问者模式实现(虚函数提供单一分发),也可以在编译时通过模板或编译时访问者实现。
  4. 经典的访问者模式,在访问者类型层次结构和可访问类型层次结构之间存在循环依赖。虽然添加新的访问者时无需修改可访问类的代码,但当访问者层次结构发生变化时,可访问类需要重新编译。而每次添加新的可访问类时,访问者层次结构都必须随之改变,从而形成依赖循环。无环访问者通过使用交叉转换和多重继承可以打破了这一循环。
  5. 对于由多个较小对象组成的复合对象,接受访问者的一种自然方式是逐个访问这些组成部分。这种模式以递归方式实现,最终会访问对象中包含的每一个内置数据成员,并且以固定、预定义的顺序进行。所以该模式自然地契合了序列化和反序列化的需求,即需要将对象分解为一组内置类型,然后再将其还原。