- 定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
package design.visitor;
public abstract class Employee {
private String name;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public abstract void accept(IVisitor visitor);
}
class CommonEmployee extends Employee{
private String job;
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public void job(){
System.out.println("我的工作是" + this.job);
}
@Override
public void accept(IVisitor visitor) {
visitor.voist(this);
}
}
class Manager extends Employee{
private String report;
public String getReport() {
return report;
}
public void setReport(String report) {
this.report = report;
}
public void report(){
System.out.println("本季度报表情况" + this.report);
}
@Override
public void accept(IVisitor visitor) {
visitor.voist(this);
}
}
interface IVisitor{
void voist(Manager manager);
void voist(CommonEmployee common);
}
class Vistor implements IVisitor{
@Override
public void voist(Manager manager) {
this.getManageInfo(manager);
}
@Override
public void voist(CommonEmployee common) {
this.getCommonEmployeeInfo(common);
}
public void getCommonInfo(Employee e){
System.out.println("员工姓名:"+ e.getName());
System.out.println("员工性别:"+ e.getSex());
}
public void getManageInfo(Manager manager){
this.getCommonInfo(manager);
manager.report();
}
public void getCommonEmployeeInfo(CommonEmployee common){
this.getCommonInfo(common);
common.getJob();
}
}
class Test{
public static void main(String[] args) {
CommonEmployee commonEmployee = new CommonEmployee();
commonEmployee.setJob("开发");
commonEmployee.setName("张三");
commonEmployee.setSex("男");
Manager manager = new Manager();
manager.setReport("创造营收500亿元");
manager.setName("王经理");
manager.setSex("女");
commonEmployee.accept(new Vistor());
manager.accept(new Vistor());
}
}
输出:
员工姓名:张三
员工性别:男
员工姓名:王经理
员工性别:女
本季度报表情况创造营收500亿元