Department充当抽象访问者角色,FAdepartment 表示财务部,HRdepartment表示人力资源部,他们充当具体访问者角色。Employee表示抽象元素角色,Employlist充当对象结构,用于表示员工列表,FullTime表示正杀员工,paryTime表示临时员工。
package visitor;
public interface employee {
public void accept(Department handler);
}
class fulltime implements employee{
private String name;
private double weeklyWage;
private int workTime;
public fulltime(String name, double weeklyWage, int workTime) {
this.name = name;
this.weeklyWage = weeklyWage;
this.workTime = workTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getWeeklyWage() {
return weeklyWage;
}
public void setWeeklyWage(double weeklyWage) {
this.weeklyWage = weeklyWage;
}
public int getWorkTime() {
return workTime;
}
public void setWorkTime(int workTime) {
this.workTime = workTime;
}
public void accept(Department handler) {
handler.visit(this);
}
}
class parttime implements employee{
private String name;
private double hourWage;
private int age;
public parttime(String name, double hourWage, int age) {
this.name = name;
this.hourWage = hourWage;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getHourWage() {
return hourWage;
}
public void setHourWage(double hourWage) {
this.hourWage = hourWage;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void accept(Department handler) {
handler.visit(this);
}
}
package visitor;
public class Department {
public void visit(fulltime f) {
}
public void visit(parttime p) {
}
}
class Fadepartment extends Department{
public void visit(fulltime em){
int workTime =em.getWorkTime();
double weekWage =em.getWeeklyWage();
if(workTime >40){
weekWage =weekWage+(workTime-40)*100;
}else if(workTime<40){
weekWage =weekWage-(40-workTime)*80;
if(weekWage<0){
weekWage=0;
}
}
System.out.println("正式员工"+em.getName()+"实际工资为"+em.getWeeklyWage());
}
public void visit(parttime e){
int workTime= e.getAge();
double hourWage =e.getHourWage();
System.out.println("临时工"+e.getName()+"工资为"+workTime*hourWage);
}
}
class Hrdepartment extends Department{
@Override
public void visit(fulltime f) {
int workTime =f.getWorkTime();
System.out.println("正式员工"+f.getName()+"实际工作时间为"+f.getWorkTime()+"");
if(workTime >40){
System.out.println("正式员工"+f.getName()+"加班时间"+(workTime-40));
}else if(workTime<40){
System.out.println("正式员工"+f.getName()+"请假时间"+(40-f.getWorkTime()));
}
}
@Override
public void visit(parttime p) {
int workTime=p.getAge();
System.out.println("临时工"+p.getName()+"实际工作时间"+p.getAge());
}
}
package visitor;
import java.util.ArrayList;
public class EmployeeList {
private ArrayList list= new ArrayList();
public void addEmployee(employee e){
list.add(e);
}
public void removeEmployee(employee e){
list.remove(e);
}
public void accept(Department d){
for (Object o :list){
( (employee) o).accept(d);
}
}
}
package visitor;
public class client {
public static void main(String[] args) {
EmployeeList list =new EmployeeList();
employee e1,e2,e3,e4;
e1=new fulltime("小明",2030.0,45);
e2=new fulltime("小芳",2582.0,55);
e3=new fulltime("小文",1872.0,35);
e4=new parttime("大明",21,1300);
list.addEmployee(e1);
list.addEmployee(e2);
list.addEmployee(e3);
list.addEmployee(e4);
Department fa,hr;
fa= new Fadepartment();
hr= new Hrdepartment();
System.out.println("财务部数据");
list.accept(fa);
System.out.println("人力资源部数据");
list.accept(hr);
}
}
运行结果: