Lec6_Visitor-汉语软件设计模式.ppt

  1. 1、本文档共61页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Lecture 6. 访问者模式 The Visitor Pattern 本讲内容 访问者模式的引入 访问者模式正规类图 使用访问者模式进行设计的例子 进一步研究 访问者模式的引入 Example 1:税收问题(tax computation problem) 美国有很多种税, 包括企业税,个人所得税等等。 税种可以表示成一个如下的层次类. 为了计算税收,我们可以使用一个带有主方法类,调用税种层次类,获得税率等等 如下图。 访问者模式的引入 本设计的缺点。 Problems in this design (drawbacks): 这样的设计,将许多的各种操作分布于各种节点使 得很难对系统进行 理解; 维护,与 改变。 访问者模式的引入 问题 (drawbacks) (cont): 例如, 可维护性差: 各种不同类型众多的节点使得系统不容易维护; 可扩展性差 : 增加新的操作通常要求重新编译所有的类, 见下页 访问者模式的引入 改善设计:将具体的计算税收的方法从层次类中分 离出来,而在层次类中保留数据维护方法。 One possible solution to improve these: Separate the main functionalitie(s) of the classes, i.e., let the “Tax” class be independent of the operations that apply to them. 访问者模式的引入 以上的类的设计的工作原理 将每个类中相关的操作封装在一个独立的叫做visitor对象里面; 将visitor对象发送到Tax对象的节点里面; Visitor类可以访问Tax树的所有节点 访问者模式的引入 进一步改善设计 (More Improved design) 为了以上的设计更加有效,我们改变一下以上设计 新设计见下页 访问者模式的引入 新设计的解释 在新的设计中, 类名TacCalculator已经被改为TaxVisitor; TaxVisitor 类里面的方法名TaxVisitor已经被改变为visitxxx: 很带有提示性的名字, 方法名的xxx部分意味着本方法访问xxx类,并且本方法要从xxx类获得信息,并且为类xxx计算税额; 在Tax类中每个子类中,增加一个名为accept()的方法,以便邀请(拉入)特定的访问者对象 访问者模式的引入 为什么要引入访问者方法与接受方法: 意图:在ElectronicTax与TaxVisitor之间精心地设 计一个接口,以便使得两个类能通过该接口连接起 来。 访问者模式的引入 类ElectronicTax 中的accept 方法 accept(TaxVisitor v) v. visitElectronicTax() } 访问者模式的引入 两个接口是怎样被链接在一起的呢? 访问者模式的引入 Client 类负责创建两个类的对象并且使用accept方法 将两个类连接在一起 访问者模式组件的解释 Visitor类为对象结构(Object Structure)中的每个Element层次类中的每个类声明了一个访问操作 The operations name and signature identifies the class that sends the Visit request to the visitor. For example, method visitHardDisk 让访问者决定具体的被访问的类。然后,访问者(visitor)可以利用其特有的接口直接访问该元素 ConcreteVisitor 实现其超类Visitor 中声明的每个操作. 每个操作实现了访问结构中的对象算法的一部分; 提供了算法的上下文、存储局部状态;随着对结构体的访问,经常积累结果 Element 定义了带有Visitor类型参数的访问操作(Accept operation). ConcreteElement (ElementA, ElementB) 实现accept操作. 也可能实现一些帮助访问者实现一些功能,例如, getData 方法 ObjectStructure (Program) (可以省略) 可以枚举其元素; 可以提供高层接口,允许访问者访问其元素; 该类可以使用一个聚合结构例如Java ArrayList将被访问对象集合在一起,然后再使用一个循环语句批量调用accept方法。 任务: 我们需要为商店服务员写一个管理系统 计算总价格 检查e-bike的存货消息 其它功能. 设计1: 写一个写一个带有主方法main()的客户程序,调用每个具

您可能关注的文档

文档评论(0)

东山书苑 + 关注
实名认证
内容提供者

业务以学生学习成长为中心,为外语培训、中小学基础教育、学前教育,提供各种学习资料支持服务。

1亿VIP精品文档

相关文档