IVisitor.java代码如下:
Visitor.java代码如下:
Employee.java代码如下:
Manager.java代码如下:
CommonEmployee.java代码如下:
Client.java代码如下:
运行结果如下:
package com.designPattern.visitor;
public interface IVisitor {
public void visit(CommonEmployee commonEmployee);
public void visit(Manager manager);
}
Visitor.java代码如下:
package com.designPattern.visitor;
public class Visitor implements IVisitor{
@Override
public void visit(CommonEmployee commonEmployee) {
System.out.println(this.getCommonEmployee(commonEmployee));
}
@Override
public void visit(Manager manager) {
System.out.println(this.getManagerInfo(manager));
}
private String getBasicInfo(Employee employee){
String info = "姓名:"+employee.getName()+"\t"+"性别:"+(employee.getSex()==Employee.FEMALE?"女":"男")+"\t"+"薪水:"+employee.getSalary()+"\t";
return info;
}
private String getManagerInfo(Manager manager){
String basicInfo = this.getBasicInfo(manager);
String otherInfo = "业绩:"+manager.getPerformance()+"\t";
return basicInfo+otherInfo;
}
private String getCommonEmployee(CommonEmployee commonEmployee){
String basicInfo = this.getBasicInfo(commonEmployee);
String otherInfo = "工作:"+commonEmployee.getJob()+"\t";
return basicInfo+otherInfo;
}
}
Employee.java代码如下:
package com.designPattern.visitor;
public abstract class Employee {
public final static int MALE = 0;
public final static int FEMALE = 1;
private String name;
private int salary;
private int sex ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public abstract void accept(IVisitor visitor);
}
Manager.java代码如下:
package com.designPattern.visitor;
public class Manager extends Employee{
private String performance ;
public String getPerformance() {
return performance;
}
public void setPerformance(String performance) {
this.performance = performance;
}
public void accept(IVisitor visitor) {
visitor.visit(this);
}
}
CommonEmployee.java代码如下:
package com.designPattern.visitor;
public class CommonEmployee extends Employee{
private String job;
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public void accept(IVisitor visitor) {
visitor.visit(this);
}
}
Client.java代码如下:
package com.designPattern.visitor;
import java.util.ArrayList;
import java.util.List;
public class Client {
public static void main(String[] args) {
for(Employee employee:mockEmployee()){
employee.accept(new Visitor());
}
}
public static List<Employee> mockEmployee(){
List<Employee> employeeList = new ArrayList<Employee>();
CommonEmployee zhangsan = new CommonEmployee();
zhangsan.setJob("java开发工程师");
zhangsan.setName("张三");
zhangsan.setSalary(1900);
zhangsan.setSex(Employee.MALE);
employeeList.add(zhangsan);
CommonEmployee liSi = new CommonEmployee();
liSi.setJob("美工");
liSi.setName("李四");
liSi.setSalary(4000);
liSi.setSex(Employee.FEMALE);
employeeList.add(liSi);
Manager wangwu = new Manager();
wangwu.setName("王五");
wangwu.setPerformance("业绩很好");
wangwu.setSalary(20000);
wangwu.setSex(Employee.MALE);
employeeList.add(wangwu);
return employeeList;
}
}
运行结果如下:
姓名:张三 性别:男 薪水:1900 工作:java开发工程师
姓名:李四 性别:女 薪水:4000 工作:美工
姓名:王五 性别:男 薪水:20000 业绩:业绩很好