Java设计模式:访问者模式,同一数据对象,不同访问者索取目的不同
/*** 员工接受不同部门的数据访问。 * 但是不同部门访问该名员工获取的数据不相同。* * @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设计模式:访问者模式,同一数据对象,不同访问者索取目的不同相关推荐
- java设计模式迭代器模式_迭代器设计模式示例
java设计模式迭代器模式 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式 ...
- java设计模式迭代器模式_迭代器模式和Java
java设计模式迭代器模式 大家好,在本文中,我们将检查Iterator Pattern . 我知道你们中许多人已经使用过一种设计模式,但是也许您没有意识到它是模式,或者不知道它的巨大价值. 根据&l ...
- Java设计模式——备忘录模式
Java设计模式--备忘录模式 需求 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状 ...
- Java 设计模式——状态模式
概述 很多人在说状态模式的时候总拿策略模式来进行对比,可能他们的类图会有一点类似,可我却不认为他们有多么相像.你可以阅读<Java设计模式--策略模式>这篇博客,并与本文对比,以找到蛛丝马 ...
- Java设计模式——Builder模式
前言 之前写Android程序的时候,经常会用到Dialog(对话框)这个控件.我们在使用Dialog,比如AlertDialog的时候就用到了这里要说明的Builder模式.现在我们来看一下这样的一 ...
- Java设计模式-工厂模式(3)抽象工厂模式
在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...
- Java设计模式-工厂模式(1)简单工厂模式
Java设计模式-工厂模式(1)简单工厂模式 一.前言 1)例子 2)类图关系 3)代码实现 二.简单工厂模式 2.1.概述: 2.2.类图关系: 2.3.代码修改: 2.4.优缺点 2.5.扩展-简 ...
- java设计模式代理模式_Java中的代理设计模式
java设计模式代理模式 代理对象或代理对象为另一个对象提供占位符,以控制对该对象的访问. 代理充当原始对象的轻量级版本或简化版本. 它支持与原始对象相同的操作,但可以将那些请求委托给原始对象以实现它 ...
- java设计模式 订阅模式_Java中的复合设计模式
java设计模式 订阅模式 当我们必须使用对象的树状分层结构时,复合设计模式非常有用. 它使我们能够统一对待单个对象和对象组成. 它属于结构设计模式的范畴,因为它将对象组合成树形结构以表示部分整个层次 ...
- java设计模式迭代器模式_Java中的迭代器设计模式–示例教程
java设计模式迭代器模式 迭代器模式是一种行为模式,它用于提供遍历一组对象的标准方式. Iterator模式在Java Collection Framework中得到了广泛使用,其中Iterator ...
最新文章
- poj1486(二分图必须边)
- HEOI 2012 旅行问题
- linux学习笔记-rpm
- python中try except处理程序异常的三种常用方法
- 一束激光冒充人声:110米外黑掉智能音箱,手机电脑平板也中招
- python要自学多长时间-怎么自学python,大概要多久?
- NEFU 560 半数集
- PERFORMANCE-MONITORING(转)
- Sql Server 语句集合
- vue中的VNode
- java只有值传递_为什么说java中只有值传递
- 通过import keyword查看python中定义的关键字
- 指针数组和数组指针的本质(四十一)
- 【C++】关于strlen函数使用的坑(与socket sendto函数配合使用)
- CS5263|DP转HDMI 4K60HZ转换方案|DP转HDMI 2.0转换电路
- HTML实例—以一个简单网页为例
- 成为Java GC专家系列(2) ——监控Java垃圾回收
- 新加坡基金会非盈利公司区块链ICO
- Java写泡泡堂网络游戏
- pandas 数据合并 pd.join() pd.merge() pd.crosstab() pd.concat()