13 Vistor模式——访问数据结构并处理数据
13.1 Vistor模式
在访问者模式中。数据结构与处理被分离开来。我们编写一个表示“访问者”的类来访问数据结构中的元素,并把对各元素的处理交给访问者。这样,当需要增加新的处理时,我们只需要编写新的访问者,然后数据结构可以接受访问者的访问即可。
| 名字 | 说明 |
|---|---|
| Visitor | 表示访问者的抽象类,它访问文件和文件夹 |
| Element | 表示数据结构的接口,它接受访问者的访问 |
| ListVisitor | Visitor类的子类,显示文件和文件夹一览 |
| Entry | File类和Directory类的父类,它是抽象类(实现了Element) |
| File | 表示文件的类 |
| Directory | 表示文件夹的类 |
| FileTreatementException | 表示向文件中add是发生的异常 |
| Main | 测试程序的类 |
13.4 拓展思路要点
双重分发
该模式中的调用关系
Element.accept(Visitor)Visitor.visit(Element)
上述两个是相反的关系。element接受vistor,而vistor又访问element。<br />在访问者模式中,ConcreteElement和ConcreteVistor这两个角色共同决定了实际进行的处理。这种消息分发的方式一般被称为**双重分发**。
Visitor模式的目的是将处理从数据结构中分离出来。书籍结构很重要,它能将元素集合和关联在一起。但是,需要注意的是,保存数据结构与以数据结构为基础进行处理是两种不同的东西。
14 责任链模式
14.1 Chain of Responsibility模式
将多个对象组成一条责任链,然后按照它们在职责链上的顺序一个一个地找出到应该谁来负责处理。
14.2 示例程序

14.3 责任链中的角色

责任链中有以下角色
- Handler(处理者) handler角色定义了处理请求的接口。Handler知道下一个处理者是谁,如果自己无法处理请求,它会请求转给下一个处理者。
- ConcreteHandler(具体的处理者)
- Client(请求者)
