发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。
1.Visitor 抽象访问者角色,为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色,这样访问者就可以通过该元素角色的特定接口直接访问它。2.ConcreteVisitor.具体访问者角色,实现Visitor声明的接口。3.Element 定义一个接受访问操作(accept()),它以一个访问者(Visitor)作为参数。4.ConcreteElement 具体元素,实现了抽象元素(Element)所定义的接受操作接口。5.ObjectStructure 结构对象角色,这是使用访问者模式必备的角色。它具备以下特性:能枚举它的元素;可以提供一个高层接口以允许访问者访问它的元素;如有需要,可以设计成一个复合对象或者一个聚集(如一个列表或无序集合)。
在生活中,我们要去医院看病,当我们挂号找到主治医生的医生看完病以后,会给你开一张药单,这个时候你需要先去付费,由划价医生收取药费,然后你拿着付费单再去找抓药师抓药。传统上我们也许会,写一个划价师类,里面根据药的名称做判断收取多少费用;写一个抓药师根据药单上面名称要判断去哪里抓药。可能使用Switch进行判断,这样增加了药就要改变划价人员和药房工作者的代码。
访问者模式的目的是封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。为不同类型的元素提供多种访问操作方式,且可以在不修改原有系统的情况下增加新的操作方式,这就是访问者模式的模式动机。
优点:1、使得新增新的访问操作变得更加简单。2、能够使得用户在不修改现有类的层次结构下,定义该类层次结构的操作。3、将有关元素对象的访问行为集中到一个访问者对象中,而不是分散搞一个个的元素类中。缺点:1、增加新的元素类很困难。在访问者模式中,每增加一个新的元素类都意味着要在抽象访问者角色中增加一个新的抽象操作,并在每一个具体访问者类中增加相应的具体操作,违背了“开闭原则”的要求。2、破坏封装。当采用访问者模式的时候,就会打破组合类的封装。3、比较难理解
1、对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作。2、需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作“污染”这些对象的类,也不希望在增加新操作时修改这些类。
来自: 鸿枫nh > 《设计模式》
0条评论
发表
请遵守用户 评论公约
23. 访问者模式
23. 访问者模式一. 定义Visitor(访问者模式):表示一个作用于某对象结构中的各元素的操作。二. 角色抽象访问者(Visitor)角色:生命了一个或多个访问操作,形成所有的具体元素角色必须实现的接口。具...
C#设计模式系列:访问者模式(Visitor)
C#设计模式系列:访问者模式(Visitor)1、访问者模式简介。1.1>、定义。作用于某个对象群中各个对象的操作,可以使在不改变对象本身...
设计模式系列之一:23种GoF设计模式概述
也就是说用户对单个对象和组合对象具有一致的访问性。状态(State)模式:针对有状态的对象,将其改变状态的行为抽取封装到状态中,这样有状态的对象在其内部状态发生改变时,其行为也发生了改变,从而...
Java设计模式-访问者模式
Java设计模式-访问者模式。定义:封装对数据结构中元素的操作,使得不需要修改这些元素的类,就可以为增加新的操作..缺点:元素的细节需要对访问者公开.元素变更比较困难.增加或删除元素,需要对访...
23个设计模式列表 - Thinking in nothing... - JavaEye技...
23个设计模式列表 - Thinking in nothing... - JavaEye技...23个设计模式列表创建型模式...3. Factory Method.. 3定义一个用于创建对象的接口,让子类决定实例化哪一个类。4. ...
访问者模式(visitor)解析例子
访问者模式(visitor)解析例子摘要:本文深入浅出的讲述了设计模式中的访问者模式,并给出了简单的示例,例子浅显易懂,并附带源代码。协作...
设计模式概述
因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。因...
浅学设计模式之迭代器模式
2) 具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置。4) 具体容器角色(Concrete Con...
C#设计模式之代理模式(一)
代理模式是一种应用很广泛的结构型设计模式,而且变化形式非常多,常见的代理形式包括远程代理、保护代理、虚拟代理、缓冲代理、智能引...
微信扫码,在手机上查看选中内容