iOS设计模式-访问者模式

来源:互联网 发布:合同执行情况跟踪软件 编辑:程序博客网 时间:2024/05/14 00:01

访问者模式

1.定义
它表示一个作用于某对象结构中的各个元素的操作,它让我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作
2.理解

这用于某个对象结构中的元素数目比较固定(基本不会变动),而对于这些元素的操作可能要变化(增加新操作),vistor提供了在某个状态下,对对象结构中各元素的不同操作的访问接口,对象中使用accept接口接受一个具体的访问者。符合open-close原则。

访问者模式适用于数据结构相对稳定的系统,它把数据结构和作用于结构上的操作之间的耦合解开,使得操作集合可以相对自由地演化。

访问者模式的优点就是增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者。访问者模式将有关的行为集中到一个访问者对象中。缺点是是增加新的数据结构变得复杂

3、何时使用访问者模式

(1)类的结构很复杂,很少对类做修改;但是经常需要向其中添加新的操作
(2)需要对一个组合结构中的对象进行很多不相关的操作,但是又不想让这些操作”污染”这些对象的类,可以考虑将相关的操作集中起来,定义在一个访问者类中
4.类结构图
这里写图片描述
访问者模式包含如下角色:
抽象访问者(Vistor): — 为该对象结构中ConcreteElement的每一个类声明一个Visit操作。该操作的名字和特
征标识了发送Visit请求给该访问者的那个类。这使得访问者可以确定正被访问元素
的具体的类。这样访问者就可以通过该元素的特定接口直接访问它。
具体访问者(ConcreteVisitor): — 实现每个由Visitor声明的操作。每个操作实现本算法的一部分,而该算法片断乃是
对应于结构中对象的类。ConcreteVisitor为该算法提供了上下文并存储它的局部状态。
这一状态常常在遍历该结构的过程中累积结果。
抽象元素(Element):定义一个Accept操作,它以一个访问者为参数。
具体元素(ConcreteElement): 实现Accept操作,该操作以一个访问者为参数。
对象结构(ObjectStructure): 能枚举它的元素。可以提供一个高层的接口以允许该访问者访问它的元素。可以是一个复合或是一个集合,如一个列表或一个无序集合。

0 0