通过访问者,访问普通员工、经理的信息。

一、单位里所有员工抽象类:

package com.teng.abs;import com.teng.inter.IVisitor;
/*** 单位里的员工抽象类* <br>创建日期:2016年10月21日* <br><b>Copyright 2016 UTOUU All Rights Reserved</b>* @author tengxiang* @since 1.1* @version 1.1*/
public abstract class Employee {public final static int MAN = 0;//男public final static int WOMAN = 1;//女  //姓名private String name;//性别private int sex;//薪资private String salary;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getSex() {return sex;}public void setSex(int sex) {this.sex = sex;}public String getSalary() {return salary;}public void setSalary(String salary) {this.salary = salary;}//允许一个访问者过来访问public abstract void accept(IVisitor visitor);
}

二、普通员工实现类

package com.teng.abs;import com.teng.inter.IVisitor;/*** 普通员工* <br>创建日期:2016年10月21日* <br><b>Copyright 2016 UTOUU All Rights Reserved</b>* @author tengxiang* @since 1.1* @version 1.1*/
public class CommonEmployee extends Employee {//工作内容private String job;public String getJob() {return job;}public void setJob(String job) {this.job = job;}//允许访问者访问@Overridepublic void accept(IVisitor visitor) {visitor.visit(this);}
}

三、部门经理实现类

package com.teng.abs;import com.teng.inter.IVisitor;/*** 部门经理* <br>创建日期:2016年10月21日* <br><b>Copyright 2016 UTOUU All Rights Reserved</b>* @author tengxiang* @since 1.1* @version 1.1*/
public class Manager extends Employee {//业绩private String performance;public String getPerformance() {return performance;}public void setPerformance(String performance) {this.performance = performance;}//允许访问者访问@Overridepublic void accept(IVisitor visitor) {visitor.visit(this);}}

四、访问者接口

package com.teng.inter;import com.teng.abs.CommonEmployee;
import com.teng.abs.Manager;/*** 访问者接口* <br>创建日期:2016年10月21日* <br><b>Copyright 2016 UTOUU All Rights Reserved</b>* @author tengxiang* @since 1.1* @version 1.1*/
public interface IVisitor {//普通员工public void visit(CommonEmployee commonEmployee);//部门经理public void visit(Manager manager);
}

五、访问者实现类

package com.teng.abs;import com.teng.inter.IVisitor;/*** 访问者实现类* <br>创建日期:2016年10月21日* <br><b>Copyright 2016 UTOUU All Rights Reserved</b>* @author tengxiang* @since 1.1* @version 1.1*/
public class Visitor implements IVisitor {//访问普通员工,打印出报表@Overridepublic void visit(CommonEmployee commonEmployee) {System.out.println(getCommonEmployeeInfo(commonEmployee));}//访问部门经理,打印出报表@Overridepublic void visit(Manager manager) {System.out.println(getManagerInfo(manager));}//组装出基本信息private String getBasicInfo(Employee employee){String info = "姓名: " + employee.getName() + "\t";info += "性别 :" + (employee.getSex() == 0 ?"男":"女")  + "\t";info += "薪资:" + employee.getSalary() + "\t";return info;}//组装出普通员工信息private String getCommonEmployeeInfo(CommonEmployee commonEmployee){String str = getBasicInfo(commonEmployee);str += "工作:" + commonEmployee.getJob() + "\t";return str;}//组装出部门经理信息private String getManagerInfo(Manager manager){String str = getBasicInfo(manager);str += "业绩:" + manager.getPerformance() + "\t";return str;}
}

六、主方法的调用

package com.teng.abs;import java.util.ArrayList;
import java.util.List;/*** 主方法* <br>创建日期:2016年10月21日* <br><b>Copyright 2016 UTOUU All Rights Reserved</b>* @author tengxiang* @since 1.1* @version 1.1*/
public class Client {public static void main(String[] args) {for(Employee employee : getEmployee()){employee.accept(new Visitor());}}//模拟出公司的人员情况private static List<Employee> getEmployee(){List<Employee> list = new ArrayList<Employee>();//产生张三员工CommonEmployee zhangSan = new CommonEmployee();zhangSan.setName("张三");zhangSan.setSex(Employee.MAN);zhangSan.setSalary("5000");zhangSan.setJob("测试");list.add(zhangSan);//产生李四员工CommonEmployee liSi = new CommonEmployee();liSi.setName("李四");liSi.setSex(Employee.WOMAN);liSi.setSalary("6000");liSi.setJob("美工");list.add(liSi);//产生王五经理Manager wangWu = new Manager();wangWu.setName("王五");wangWu.setSex(Employee.MAN);wangWu.setSalary("10000");wangWu.setPerformance("优");list.add(wangWu);return list;}
}

1)首先通过循环遍历所有元素;

2)其次,每个员工对象都定义了一个访问者;

3)再其次,员工对象把自己做为一个参数调用访问者visit方法;

4)然后,访问者调用自己内部的计算逻辑,计算出相应的数据和表格元素;

5)最后,访问者打印出报表和数据;

《您的设计模式》(CBF4LIFE)之“访问者模式”【整理】相关推荐

  1. 设计模式学习之访问者模式

    访问者模式,是行为型设计模式之一.访问者模式是一种将数据操作与数据结构分离的设计模式,它可以算是 23 中设计模式中最复杂的一个,但它的使用频率并不是很高,大多数情况下,你并不需要使用访问者模式,但是 ...

  2. 设计模式--23、访问者模式

    访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作.例如处方单中的各种药品信息就是被访问 ...

  3. 设计模式之禅-访问者模式

    目录 访问者模式 例子 定义 优点 缺点 使用场景 扩展 统计功能 多个访问者 双分派 最佳实践 访问者模式 例子 员工信息,获取不同类型员工的信息. public interface IVisito ...

  4. 设计模式学习之访问者模式(Visitor,行为型模式)(21)

    参考:https://www.cnblogs.com/edisonchou/p/7247990.html 在患者就医时,医生会根据病情开具处方单,很多医院都会存在以下这个流程:划价人员拿到处方单之后根 ...

  5. C#设计模式系列:访问者模式(Visitor)

    1.访问者模式简介 1.1>.定义 作用于某个对象群中各个对象的操作,可以使在不改变对象本身的情况下,定义作用于对象的新操作. 1.2>.使用频率   低 2.访问者模式结构 2.1> ...

  6. 《研磨设计模式》chap25 访问者模式Visitor(3)联合组合模式+总结

    1. 联合组合模式 //抽象的组件对象,相当于访问者模式中的元素对象 public abstract class Component {//接受访问者的访问 public abstract void ...

  7. 《研磨设计模式》chap25 访问者模式Visitor(2)模式应用到场景

    1. 实现 //各种客户的父类 public abstract class Customer { private String customerId;// 客户编号 private String na ...

  8. 设计模式笔记(24)---访问者模式(行为型)

    Gof定义 表示一个作用于某对象结构中的各元素的操作.它可以在不改变各元素的类的前提下定义作用于这些元素的新的操作. 动机 在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法 ...

  9. Java描述设计模式(23):访问者模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 1.场景描述 电竞是游戏比赛达到"竞技"层面的体育项目.利用电子设备作为运动器械进行的.人与人之间的智力对抗 ...

  10. Java 设计模式之 Visitor 访问者模式

    Visitor 访问者模式适用的场景是,存在某个容器,里面的组成部分不会发生变化,对这些组成部分的访问,不是由这个容器决定,而是交给访问者决定. 举个生活中的例子,比如稻草人,卖包,卖鞋子这些固定的消 ...

最新文章

  1. mongodb 3.2配置内存缓存大小为MB/MongoDB 3.x内存限制配置
  2. 栈(stack)和堆(heap)
  3. IQueryable 和 IEnumerable
  4. Python控制台英汉-汉英电子词典
  5. 第三次学JAVA再学不好就吃翔(part105)--流的标准处理异常
  6. 大众点评账号业务高可用进阶之路
  7. Gartner:2021全球安全和风险支出将超1500亿美元
  8. hashmap clone_Java HashMap clone()方法与示例
  9. byte[] 数组和字符串的转换,与byte[] 数组和int类型的之间的转化
  10. mongodb 的进库操作
  11. 一起谈.NET技术,巨大转变!ASP.NET MVC2调用AJAX新特征
  12. 数据可视化技术:python数据可视化工具库汇总(共21个)
  13. 使用 OpenSSL 创建ssl自签名证书
  14. 未来,你会反感虚拟现实沉浸式广告吗?
  15. Mathematica最简教程
  16. CCF TALKs 报名 | 今天,技术如何推动社会进步
  17. 强大的全文本搜索工具——AnyTXT Searcher
  18. 大型高并发高负载网站的系统架构[转载]
  19. GoogLeNet: Going deeper with convolutions
  20. 动易html在线编辑器 漏洞,动易网站管理系统vote.asp页面存在SQL注入漏洞

热门文章

  1. 2019年秋招面试总结(一)(中兴、大疆)
  2. 解线性方程组之LU分解算法实现
  3. 金丝楠PhoebeSheareri
  4. Mobvista通过聆讯:上半年净利千万美元 同比降49%
  5. 关于wifi打印服务器方案和USB共享打印机模块工作原理
  6. 企业进军海外市场:为什么选IBM SoftLayer就对了?
  7. 基于 eBPF 的云原生可观测性深度实践
  8. hive中的分区表与视图
  9. 一个sql注入直接把我们服务搞挂了
  10. 拆掉思维里的墙 读书笔记