访问者模式
定义
访问者模式在实际的开发中使用的非常少,因为它比较难以实现,并且应用该模式可能会导致代码的可读性变差,在没有必要时,不建议使用访问者模式。
访问者模式(Visitor pattern)的原始定义时:允许在运行时将一个或多个操作应用于一组对象,将操作与对象结构分离。
- 一个是:运行时使用一组对象的一个或多个操作,比如,对不同类型的文件(.pdf、.xml、.properties) 进行扫描;
- 另一个是:分离对象的操作和对象本身的结构,比如,扫描多个文件夹下的多个文件,对于文件来说,扫描是额外的业务操作,如果在每个文件对象上都加一个扫描操作,太过于冗余,而扫描操作具有统一性,非常适合访问者模式。
访问者模式主要解决的是数据与算法的耦合问题,尤其是在数据结构比较稳定,而算法多变的情况下,为了不污染数据本身,访问者会将多种算法独立归档,并在访问数据时根据数据类型自动切换到对应的算法,实现数据的自动响应机制,并确保算法的自由扩展。
模式原理
- Visitor 接口:访问者接口,用于处理元素对象,参数也是元素接口
- Element 接口:元素接口,包含 accept 接口,接受 Visitor 参数。目的是想让每一个元素都可以让访问者去访问到。
- ConcreteElement 类:具体的元素角色,实现 Element 接口,并实现 accept 方法,该方法会调用访问者对象的 visit 方法。
- ConcreteVisitor 类:具体的访问者角色,实现 Visitor 角色,并实现 visit 方法,该方法会处理元素对象。
- Client:初始化各种数据元素类,并选择合适的访问者处理容器中的所有数据对象。
- ObjectStructure:对象结构,管理元素集合,提供遍历它的方法
