设计模式-访问者模式.ppt

设计模式-访问者模式.ppt

ID:49411250

大小:591.07 KB

页数:16页

时间:2020-02-06

设计模式-访问者模式.ppt_第1页
设计模式-访问者模式.ppt_第2页
设计模式-访问者模式.ppt_第3页
设计模式-访问者模式.ppt_第4页
设计模式-访问者模式.ppt_第5页
资源描述:

《设计模式-访问者模式.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、访问者模式产生原因模式定义与结构实例分析优缺点总结问题提出如果某系统已经完成了一个类层次并提供了满足需求的所有接口,现在要增加新的需求,我们需要怎么做?可能你会采用增加该需求并把整个层次结构统统修改一遍?然而如果需求变动会不停的发生,而且需求的任何变动都会让整个结构统统修改一遍,此时你会怎么做呢?所以,我们现在需要对这个系统结构进行重构,访问者模式也许就是你解决上面问题最好的选择.那么什么是访问者模式呢?访问者模式模式定义访问者模式(VisitorPattern):表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式

2、是一种对象行为型模式。顾名思义使用这个模式后就可以在不修改已有程序结构的前提下,通过添加额外的“访问者”完成对已有代码功能的提升。注意:不同的访问者其访问方式有所不同访问者模式访问者模式——模式结构访问者模式包含如下角色:Vistor:抽象访问者ConcreteVisitor:具体访问者Element:抽象元素ConcreteElement:具体元素ObjectStructure:对象结构访问者模式——实例购物车顾客在超市中将选择的商品,如苹果、图书等放在购物车中,然后到收银员处付款。在购物过程中,顾客需要对这些商品进行访问,以便确认这些商品的质量,之后收银员计算价格时也需要访问购

3、物车内顾客所选择的商品。此时,购物车作为一个ObjectStructure(对象结构)用于存储各种类型的商品,而顾客和收银员作为访问这些商品的访问者,他们需要对商品进行检查和计价。不同类型的商品其访问形式也可能不同,如苹果需要过秤之后再计价,而图书不需要。使用访问者模式来设计该购物过程。购物车代码-元素代码-访问者代码-对象结构代码-主函数实现访问者模式——优点提出问题:现在遇到一个问题:要向原来的购物车类层次增加一个新的操作——工商局的检查超市产品的生产日期,怎么解决呢?解决方法:仅仅需要添加一个具体的访问者角色即可,而不必修改整个类层次,这样就符合“开闭原则”的需求。而且每个访

4、问者角色都对应一个相关的操作,当需要修改一个具体的访问者角色时仅仅修改该访问者角色,而不是修改整个类层次.综上问题访问者模式的优点为:1.增加新的访问操作变得容易;2.将有关元素对象的访问行为集中到一个访问者对象中,而不是分散到各个元素类中;3.用户能在不修改类层次结构情况下定义该类层次结构的操作并修改.购物车——增加新操作”工商局”访问者模式——缺点提出问题:现在遇到一个问题:要向原来的购物车类层次增加一个新的元素“Pen”,或者“Book”元素需要改变,怎么解决呢?解决方法:你必须要修改访问者角色和每一个具体访问者角色,对应的访问者每一个函数的参数都要相应的变化.缺点一:访问者

5、模式增加新的元素很困难,每增加一个新的元素或修改一个元素,就要对相应的访问者类进行修改,违背了“开闭原则”。而且访问者角色要执行与角色相关的操作,就必须让元素的内部属性暴露出来,在java中就意味着对象可以访问,这就破坏了元素的封装性。缺点二:破坏封装性。缺点三:而且访问者之间能够传递的信息有限,这就往往会限制访问者模式的使用。购物车——修改”Book”总结这是一个巧妙而又复杂的模式,它的使用条件比较苛刻.当系统存在固定的数据结构(类层次),又有不同的行为,那么访问者模式是个不错的选择.如果需要修改或增加元素时,就不应该使用访问者模式.访问者模式要尽可能的将对象浏览逻辑存放在Vis

6、itor类中,而不是放在它的子类中;这样ConcreteVisitor类所访问的对象结构依赖较少,便于维护。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。