netc设计模式23种gof designpattern访问者.pptxVIP

netc设计模式23种gof designpattern访问者.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二十三章 Visitor 访问者 (行为型模式) 动机(Motivation) 在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。 如何在不更改类层次结构的前提下,在运行时根据需要透明地为类层次结构上的各个类动态添加新的操作,从而避免上述问题? 意图(Intent) 表示一个作用于某对象结构中的各元素的操作。它可以在不改变各元素的类的前提下定义作用于这些元素的新的操作。 ——《设计模式》GoF 结构(Structure) 结构详解 生活中的例子 老师对学生做家访 老师: 数学老师 英语老师 …. 学生: 天才学生 调皮学生 ….. 学校是老师和学生的维护和调度者 实现- Vistor 和 Element //Vistor public abstract class 老师 { //Visit public abstract void 做天才学生家访(天才学生 element); public abstract void 做调皮学生家访(调皮学生 element); } //Element public abstract class 学生 { //Accept public abstract void 接受家访(老师 vistor); } 实现- ConcreteElement //ConcreteElement public class 天才学生 : 学生 { public override void 接受家访(老师 vistor) { vistor.做天才学生家访(this); this.显示天才(); } //具体类中自己的方法 public void 显示天才() { Console.WriteLine(天才学生做了个腾空1800度空翻); } } public class 调皮学生 : 学生 { public override void 接受家访(老师 vistor) { vistor.做调皮学生家访(this); this.开玩笑(); } //具体类中自己的方法 public void 开玩笑() { Console.WriteLine(调皮学生和老师开玩笑,哈哈哈哈); } } 实现- ConcreteVistor //ConcreteVistor public class 数学老师 : 老师 { public override void 做天才学生家访(天才学生 element) { Console.WriteLine(\n{0}:孩子啊,你是个天才,一定要学好数学,走遍天下都不怕., this.GetType().Name); Console.WriteLine({0}家访了:{1}, this.GetType().Name, element.GetType().Name); } public override void 做调皮学生家访(调皮学生 element) { Console.WriteLine(\n{0}:孩子啊,你虽然调皮,但是数学还是要好好学,否则不会数钱的., this.GetType().Name); Console.WriteLine({0}家访了:{1}, this.GetType().Name, element.GetType().Name); } } public class 英语老师 : 老师 { public override void 做天才学生家访(天才学生 element) { Console.WriteLine(\n{0}:孩子啊,你是个天才,学好英语,将来出国到利比亚., this.GetType().Name);

文档评论(0)

+ 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档