# 访问器


## ***行为变化模式***

1. ***什么是行为变化***
   - *在组件的构建过程中, 组件行为的变化经常导致组件本身剧烈的变化，"行为变化"模式将组件的行为和组件本身进行解藕, 从而支持组件行为的变化, 实现两者之间的松耦合*
2. ***典型模式***
   - *Command*
   - *Visitor*

## ***访问器 - 前言***

1. *访问器这个模式 **有一个很难的前提***
   - *就是在扩展的类的子类个数必须稳定 也就是说要提前就知道有多少个子类 不能增加*

## ***动机***

1. *在软件构建过程中, 由于需求的改变, 某些类层次结构中常常需要增加新的行为(方法)，如果直接在基类中做这样的更改, 将会给子类带来很繁重的变更负担, 甚至破坏原有设计*
2. *如何在不更改层次结构的前提下, 在运行时根据需要透明的为类层次结构上的各个类动态添加新的操作, 从而避免上述问题?*

## ***模式定义***

1. *表示一个作用于某对象结构中的各元素操作，使得可以在不改变(稳定)各元素的类的前提下定义(扩展)作用于这些元素的新操作(变化)*

## ***要点总结***

1. *Visitor模式通过所有双重分发来实现在不更改类层次结构的前提下, 在运行时透明的为类层次结构上的各个类动态添加新的操作*
2. *所有双重分发即Visitor模式中间包含了两个多态分发*
   - *第一个为accept方法的多态辨析*
   - *第二个为visitElementX方法的多态辨析*
3. *Visitor模式的最大缺点为扩展类层次结构, 会导致visitor类的改变，因此这个模式适用于类层次结构稳定, 而其中的操作方法频繁变化*

