访问者模式是设计模式中相对比较复杂的设计模式,在Android源码中的UnifiedEmail项目中的HtmlDocument就使用了访问者模式,Email中的内容可以是Html文档,而Html文档需要解析保存,HtmlDocument就是html节点的一个容器,本文将介绍HtmlDocument与访问者模式。文中对访问者模式介绍的会相对简单,如果想理解好,建议去看一下Gof的描述,更侧重于与Android源码的结合(源码基于6.0.1_r30)。原文发表在我的博客。
访问者模式
首先看一下访问者模式相关内容。
意图
表示一个作用于对象内部结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
UML图
上面就是访问者模式的简单UML图,通过定义一个外在的Visitor来访问ObjectStructor对象结构中的Element,这样可以变化访问者来访问对象结构中的元素,但又不会影响元素内部结构。
代码示例
abstract class Visitor{
public abstract void visitorElement1(ConcreteElement1 element);
public abstract void visitorElement2(ConcreteElement2 element);
}
class ConcreteVisitor1 extends Visito