/*** 员工接受不同部门的数据访问。 * 但是不同部门访问该名员工获取的数据不相同。* * @author zhangfly** @param <T>*/
public abstract class Employee<T> {public abstract void accept(Department department);public String getName() {return null;}public int getYear() {return 0;}public T getInfo() {return null;}
}
/*** 不同部门访问同一员工,访问的目的不同,获取的员工数据不同。* * @author zhangfly**/
public abstract class Department {public abstract void visit(Employee employee);
}
public class EmployeeImpl extends Employee {private String name = "zhang";private int year = 2019;@Overridepublic void accept(Department department) {department.visit(this);}@Overridepublic String getName() {return name;}@Overridepublic int getYear() {return year;}
}
/*** A,不同部门之一。* * @author zhangfly**/
public class DepartmentA extends Department {@Overridepublic void visit(Employee employee) {System.out.println("Department A 访问-> " + employee.getName());}
}
/*** B,不同部门之一。* * @author zhangfly**/
public class DepartmentB extends Department {@Overridepublic void visit(Employee employee) {System.out.println("Department B 访问-> " + employee.getYear());}
}
public class Test {public Test() {Employee employee = new EmployeeImpl();Department departmentA = new DepartmentA();Department departmentB = new DepartmentB();departmentA.visit(employee);departmentB.visit(employee);System.out.println("###分割线###");employee.accept(departmentB);employee.accept(departmentA);}public static void main(String[] args) {new Test();}
}

输出:

Department A 访问-> zhang
Department B 访问-> 2019
###分割线###
Department B 访问-> 2019
Department A 访问-> zhang

附另外一篇访问者模式文:https://blog.csdn.net/zhangphil/article/details/88742963

Java设计模式:访问者模式,同一数据对象,不同访问者索取目的不同相关推荐

  1. java设计模式迭代器模式_迭代器设计模式示例

    java设计模式迭代器模式 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式 ...

  2. java设计模式迭代器模式_迭代器模式和Java

    java设计模式迭代器模式 大家好,在本文中,我们将检查Iterator Pattern . 我知道你们中许多人已经使用过一种设计模式,但是也许您没有意识到它是模式,或者不知道它的巨大价值. 根据&l ...

  3. Java设计模式——备忘录模式

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

  4. Java 设计模式——状态模式

    概述 很多人在说状态模式的时候总拿策略模式来进行对比,可能他们的类图会有一点类似,可我却不认为他们有多么相像.你可以阅读<Java设计模式--策略模式>这篇博客,并与本文对比,以找到蛛丝马 ...

  5. Java设计模式——Builder模式

    前言 之前写Android程序的时候,经常会用到Dialog(对话框)这个控件.我们在使用Dialog,比如AlertDialog的时候就用到了这里要说明的Builder模式.现在我们来看一下这样的一 ...

  6. Java设计模式-工厂模式(3)抽象工厂模式

    在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...

  7. Java设计模式-工厂模式(1)简单工厂模式

    Java设计模式-工厂模式(1)简单工厂模式 一.前言 1)例子 2)类图关系 3)代码实现 二.简单工厂模式 2.1.概述: 2.2.类图关系: 2.3.代码修改: 2.4.优缺点 2.5.扩展-简 ...

  8. java设计模式代理模式_Java中的代理设计模式

    java设计模式代理模式 代理对象或代理对象为另一个对象提供占位符,以控制对该对象的访问. 代理充当原始对象的轻量级版本或简化版本. 它支持与原始对象相同的操作,但可以将那些请求委托给原始对象以实现它 ...

  9. java设计模式 订阅模式_Java中的复合设计模式

    java设计模式 订阅模式 当我们必须使用对象的树状分层结构时,复合设计模式非常有用. 它使我们能够统一对待单个对象和对象组成. 它属于结构设计模式的范畴,因为它将对象组合成树形结构以表示部分整个层次 ...

  10. java设计模式迭代器模式_Java中的迭代器设计模式–示例教程

    java设计模式迭代器模式 迭代器模式是一种行为模式,它用于提供遍历一组对象的标准方式. Iterator模式在Java Collection Framework中得到了广泛使用,其中Iterator ...

最新文章

  1. poj1486(二分图必须边)
  2. HEOI 2012 旅行问题
  3. linux学习笔记-rpm
  4. python中try except处理程序异常的三种常用方法
  5. 一束激光冒充人声:110米外黑掉智能音箱,手机电脑平板也中招
  6. python要自学多长时间-怎么自学python,大概要多久?
  7. NEFU 560 半数集
  8. PERFORMANCE-MONITORING(转)
  9. Sql Server 语句集合
  10. vue中的VNode
  11. java只有值传递_为什么说java中只有值传递
  12. 通过import keyword查看python中定义的关键字
  13. 指针数组和数组指针的本质(四十一)
  14. 【C++】关于strlen函数使用的坑(与socket sendto函数配合使用)
  15. CS5263|DP转HDMI 4K60HZ转换方案|DP转HDMI 2.0转换电路
  16. HTML实例—以一个简单网页为例
  17. 成为Java GC专家系列(2) ——监控Java垃圾回收
  18. 新加坡基金会非盈利公司区块链ICO
  19. Java写泡泡堂网络游戏
  20. pandas 数据合并 pd.join() pd.merge() pd.crosstab() pd.concat()

热门文章

  1. ICASSP2021:AV1帧内模式编码改进
  2. BP或FI12维护银行账户,报错“银行帐户编号XXX必须具有长度 18”
  3. Task使用线程等待延续
  4. 报表中能实现中国地图钻取到各省地图吗?
  5. Wassertein距离详解
  6. 胜博发公益:只要用手机就能随手做公益 苹果与许多公益团体合作
  7. Freekan源码搭建视频网站,并实现公网远程访问
  8. 素数筛法(传统普通、朴素筛法、埃式筛法、欧拉筛法(线性筛))
  9. 曾经被你亲手敲烂过的机械键盘
  10. Marry me(嫁给我)