访问者(Visitor)模式:访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。

/*
* 抽象访问者(Visitor)角色:声明了一个或者多个访问操作,形成所有的具体元素角色必须实现的接口。
* 具体访问者(ConcreteVisitor)角色:实现抽象访问者角色所声明的接口,也就是抽象访问者所声明的各个访问操作。
* 抽象节点(Node)角色:声明一个接受操作,接受一个访问者对象作为一个参量。
* 具体节点(Node)角色:实现了抽象元素所规定的接受操作。
* 结构对象(ObiectStructure)角色:有如下的一些责任,可以遍历结构中的所有元素;
    如果需要,提供一个高层次的接口让访问者对象可以访问每一个元素;
    如果需要,可以设计成一个复合对象或者一个聚集,如列(List)或集合(Set)。
*/

               Console.WriteLine("//===============//");ObjectStructures o2 = new ObjectStructures();o2.Attach(new Man());o2.Attach(new Woman());Success s = new Success();o2.Accept(s);//失败时候..../// <summary>/// 状态抽象类  抽象访问者(Visitor)/// </summary>public abstract class Action{//得到男人结论public abstract void GetManConclusion(Man man);//得到女人结论public abstract void GetWomanConclusion(Woman woman);}/// <summary>/// 人抽象类 抽象节点(Node)/// </summary>public abstract class Person{//接受public abstract void Accept(Action action);}/// <summary>/// 具体访问者 /// </summary>public class Success : Action{public override void GetManConclusion(Man man){Console.WriteLine("{0} {1} 时,背后多半有一个伟大的女人。", man.GetType().Name,this.GetType().Name);}public override void GetWomanConclusion(Woman woman){Console.WriteLine("{0} {1} 时,背后多半有一个不成功的男人。", woman.GetType().Name, this.GetType().Name);}}public class Man : Person{public override void Accept(Action action){action.GetManConclusion(this);}}public class Woman : Person{ public override void Accept(Action action){action.GetWomanConclusion(this);}}//结构对象(ObiectStructure)角色public class ObjectStructures{ private ArrayList elements = new ArrayList();public void Attach(Person element){elements.Add(element);}public void Detach(Person element){elements.Remove(element);}public void Accept(Action visitor){foreach (Person e in elements)e.Accept(visitor);}}

转载于:https://www.cnblogs.com/dragon-L/p/3792849.html

访问者(Visitor)模式相关推荐

  1. 设计模式学习笔记——访问者(Visitor)模式

    设计模式学习笔记--访问者(Visitor)模式 @(设计模式)[设计模式, 访问者模式, visitor] 设计模式学习笔记访问者Visitor模式 基本介绍 访问者案例 类图 实现代码 Visit ...

  2. 设计模式学习笔记--访问者(Visitor)模式

    写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式 ...

  3. 【鲁班学院】设计模式—访问者(Visitor)模式

    一.定义 访问者模式是一种从操作的对象结构中分离算法的方式. 它可以在不改变数据结构的前提下定义作用与这些元素的新操作.它遵循开闭原则. Represent an operation to be pe ...

  4. java的visitor模式_访问者模式Visitor

    一 概述 场景:通常来说,用于封装数据所用到的pojo类,其只包含get.set,对应的业务逻辑是在Service上完成的:但如果出现多个pojo类都共用一套逻辑时,则应该考虑将逻辑进行抽象,不同类型 ...

  5. Visitor(访问者) 模式

    13.1 Visitor 模式   在数据结构中保存着许多元素,我们会对元素进行 "处理".这时, "处理" 代码放在哪里比较好呢?通常的做法是将它们放在表示数 ...

  6. Visitor模式(访问者设计模式)

    Visitor ? 在Visitor模式中,数据结构与处理被分离开来.我们编写一个表示"访问者"的类来访问数据结构中的元素, 并把对各元素的处理交给访问者类.这样,当需要增加新的处 ...

  7. 23中设计模式之访问者visitor设计模式

    " 访问者设计模式学习心得分享" 适用于结构相对稳定的条目或者xxx对比时,其它相对稳定的层级组织架构使用该模式是OK滴 如条目中文件和文件夹的访问,男人和女人对同一件事情不同反应 ...

  8. 设计模式-Visitor模式(访问者模式)

    什么是访问者模式 另一个例子 双重分发 开闭原则--对扩展开放,对修改关闭 优缺点 什么是访问者模式 将数据结构与处理分离开来. 比如一个人,他有自己的名字,他可以吃东西.这里的"人&quo ...

  9. 设计模式 - Visitor 模式(访问者模式)

    作用:表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作.  UML结构图: 解析: Visitor模式把对结点的访问封装成一个抽象基类,通过派生 ...

  10. 行为模式之Visitor模式

    1.意图 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作 2.适用性 (1)一个对象结构包含很多类对象,它们有不同的接口,而你想对这些实施一些 ...

最新文章

  1. OC与Swift封装网络工具类
  2. php sql count函数,SQL COUNT() 函数
  3. Android使用GestureDetector实现手势滑动效果
  4. SharePoint 2013 开发——其他社交功能
  5. jsoncpp之初体验
  6. CentOS7安装redis并配置外网可访问(局域网可参考)
  7. C++将01数组转换为二进制对应的数值
  8. ExtJS用户带验证码登录页面
  9. BEGINNING SHAREPOINT#174; 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 client对象模型(CSOM)基础...
  10. 怎么查看计算机jdk版本,在未配置环境变量的情况下查看jdk的版本
  11. 0基础学习3dmax游戏建模有这4个技巧
  12. c语言毕业论文,关于c语言的毕业论文题目[word文档]
  13. 关于FTP服务器出现227 Entering Passive Mode错误的解决思路
  14. c语言vt指令,VT系列一:VT简述
  15. 麻省理工学院公开课:信号与系统:模拟与数字信号处理 调幅演示
  16. phpwind和discuz比较
  17. 二叉树的左视图-Python
  18. AI世界依旧在“风起云涌”中变化
  19. 单片机编程系列之分层设计2(怎样合理拆分子系统)
  20. 2021 OceanBase 数据库大赛来袭!邀你改编世界,码出未来

热门文章

  1. irobot扫地机器人 电压_【专利技术分析报告】“iRobot扫地机器人”核心专利
  2. JZOJ 3875. 【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)
  3. JZOJ 3807. 【NOIP2014模拟8.25】地砖铺设
  4. python为什么没有点击就触发_Ai中没有触发的触发器
  5. Matlab 工具箱
  6. [codevs 1035] 火车停留
  7. mysql5.7.14操作命令_Mysql5.7.14安装配置方法操作图文教程(密码问题解决办法)
  8. jquery清空div内容_一键清空微博
  9. python预测模型_Python多元线性回归-sklearn.linear_model,并对其预测结果评估
  10. mysql集群数据引擎_MySQL数据引擎