设计模式----访问者模式(visitor pattern)

IVisitor.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 业绩:业绩很好
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值