http://www.verejava.com/?id=16999202350980

package com.visit.theory;import java.util.ArrayList;public class Test
{public static void main(String[] args){ObjectStructure o = new ObjectStructure();  //依赖于ObjectStructure   //实例化具体元素   o.attach(new Man());     o.attach(new Woman());   //当成功时不同元素的不同反映   Visitor success = new Success();           //依赖于抽象的Visitor接口   o.display(success);   //当恋爱时的不同反映   Visitor amativeness = new Love();          //依赖于抽象的Visitor接口   o.display(amativeness);        }
}package com.visit.theory;public interface Visitor
{public void visit(Man man);     public void visit(Woman w);   }package com.visit.theory;public interface Person
{void accept(Visitor visitor);
}package com.visit.theory;public class Woman implements Person {   // 先对visitor进行类型转换,再执行visit方法,因为Visitor接口已经没有声明任何抽象方法了   public void accept(Visitor visitor) {   visitor.visit(this);}
}   package com.visit.theory;public class Man implements Person {   // 先对visitor进行类型转换,再执行visit方法,因为Visitor接口已经没有声明任何抽象方法了   public void accept(Visitor visitor) {   visitor.visit(this);}
}   package com.visit.theory;public class Success implements Visitor{   public void visit(Man man) {   System.out.println("当男人成功时,背后多半有一个伟大的女人");   }   public void visit(Woman girl) {   System.out.println("当女人成功时,背后大多有一个不成功的男人");   }
}   package com.visit.theory;public class Love implements Visitor{   public void visit(Man man) {   System.out.println("当男人恋爱时,凡事不懂也装懂");   }   public void visit(Woman girl) {   System.out.println("当女人恋爱时,遇事懂也装不懂");   }   }   package com.visit.theory;import java.util.ArrayList;
import java.util.List;public class ObjectStructure
{private List<Person> elements = new ArrayList<Person>();   public void attach(Person element){   elements.add(element);   }   public void detach(Person element){   elements.remove(elements);   }   //遍历各种具体元素并执行他们的accept方法   public void display(Visitor visitor){   for(Person p:elements){   p.accept(visitor);   }   }
}

转载于:https://www.cnblogs.com/verejava/p/9237077.html

Java 设计模式 之 访问者模式相关推荐

  1. Java设计模式(访问者模式-迭代器模式-观察者模式-中介者模式)

    Java设计模式Ⅶ 1.访问者模式 1.1 访问者模式概述 1.2 代码理解 2.迭代器模式 2.1 迭代器模式概述 2.2 代码理解 3.观察者模式 3.1 观察者模式概述 3.2 代码理解 4.中 ...

  2. JAVA设计模式之访问者模式

    转自: http://www.kongzid.com/archives/design20 ,更好阅读体验:http://www.kongzid.com 访问者模式(Visitor)的定义 表示一个作用 ...

  3. java设计模式-18访问者模式

    定义 封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作. 在被访问的类里面加一个对外提供接待访问者的接口 需要对一个对象结构中的对象进行很多不同操作 ...

  4. Java设计模式:访问者模式,同一数据对象,不同访问者索取目的不同

    /*** 员工接受不同部门的数据访问. * 但是不同部门访问该名员工获取的数据不相同.* * @author zhangfly** @param <T>*/ public abstract ...

  5. 由电脑专卖系统引发的Java设计模式:访问者模式

    访问者模式 定义 意图 解决问题 何时使用 优缺点 结构 电脑专卖系统 定义 访问者模式是对象的行为型模式,它的目的是封装一些施加于某些数据结构元素之上的操作,一旦这些操作需要修改的话,接收这个操作的 ...

  6. Java设计模式作业-访问者模式

    某软件公司需要设计一个源代码解析工具,该工具可以对源代码进行解析和处理,在该工具的初始版本中,主要提供了以下 3 个功能.所有代码和接口均在一个package内. 目录 作业内容 一.UML图 二.代 ...

  7. Java设计模式分为创建模式, 结构模式, 行为模式 3种类型

    Java设计模式之创建模式包括: Factory,    工厂模式 Singleton,   单例模式 Builder,    建造模式 Prototype,    原型模式 Java设计模式之结构模 ...

  8. java备忘录模式应用场景_图解Java设计模式之备忘录模式

    图解Java设计模式之备忘录模式 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态. ...

  9. Java设计模式之策略模式与状态模式

    一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...

  10. Java设计模式(建造者模式-适配器模式-桥接模式)

    Java设计模式Ⅲ 1.建造者模式 1.1 建造者模式概述 1.2 建造者模式的注意事项和细节 1.3 代码理解 2.适配器模式 2.1 类适配器模式 2.1.1 代码理解 2.2 对象适配器模式 2 ...

最新文章

  1. C 判断 —— switch语句(多个switch值与一组语句联系起来、case顺序是可任意的,default不一定是最后一个case)
  2. MapReduce数据连接
  3. mysql导出linux,linux下mysql导出导入方法
  4. linux 定时清理tomcat日志
  5. JVM-垃圾收集器与内存分配策略
  6. 《A Novel Pipeline Approach for Efficient Big Data Broadcasting》阅读报告
  7. LeetCode 481. 神奇字符串(找规律)
  8. linux cd -目录,linux cd
  9. 不用于mysql权限管理的24260_[MySQL Reference Manual] 24 MySQL sys框架
  10. windows下利用批处理命令生成maven项目(java、javaWeb)
  11. Xen虚拟化环境安装和常用命令
  12. 微信扫码点餐帮助商家赚钱的方法
  13. Beginning Lua with World of Warcraft Add-ons第三章翻译总结及一些工具
  14. linux 域名解析 命令,Linux动态域名解析命令脚本
  15. php web helloworld,webim_server.php
  16. 为Termux安装图形化界面
  17. 冬季六种低热量时蔬助你排毒
  18. Plant Design Review Based on AnyCAD
  19. C语言指针 *p++和*++p及++*p的区别
  20. 在李嘉诚传中给年轻人提出了53条人生忠告

热门文章

  1. 135.001 智能合约设计-——单员工薪酬系统
  2. zabbix-proxy+cacti+nagios基本安装配置
  3. flume介绍及应用
  4. FOSCommentBundle功能包:添加Symfony2内建的ACL安全
  5. AWK学习笔记五:可执行AWK程序
  6. 13.业务层的事务操作
  7. DHTML【6】--CSS
  8. socket 关于同一条TCP链接数据包到达顺序的问题
  9. Python热门开源项目TOP10
  10. 使用SpringCloud搭建高可用服务注册中心