public interface Visitor {
public void visit(Person person);//“双重分派”核心方法
}
public class ArmyVisitor implements Visitor{
public void visit(Person person) {
//如果传进来的参数”person“是Man类的话
if(person instanceof Man) {
Man man=(Man)person;
double stature=man.getStature();
double eyeSight=man.getEyeSight();
if(stature>1.72&&eyeSight>1.2)
System.out.println(man.getName()+"符合当兵标准");
else
System.out.println(man.getName()+"不符合当兵标准");
}
if(person instanceof Woman) {
Woman woman=(Woman)person;
double stature=woman.getStature();
double eyeSight=woman.getEyeSight();
double bloodSuger=woman.getBloodSuger();
boolean boo=bloodSuger>=60&&bloodSuger<=80;
if(stature>1.72&&eyeSight>1.2&&boo)
System.out.println(woman.getName()+"符合当兵标准");
else
System.out.println(woman.getName()+"不符合当兵标准");
}
}
}
public class FactoryVisitor implements Visitor{
public void visit(Person person) {
//如果传进来的参数”person“是Man类的话
if(person instanceof Man) {
Man man=(Man)person;
double stature=man.getStature();
double eyeSight=man.getEyeSight();
if(stature>1.55&&eyeSight>0.8)
System.out.println(man.getName()+"符合当工人标准");
else
System.out.println(man.getName()+"不符合当工人标准");
}
if(person instanceof Woman) {
Woman woman=(Woman)person;
double stature=woman.getStature();
double eyeSight=woman.getEyeSight();
double bloodSuger=woman.getBloodSuger();
boolean boo=bloodSuger>=50&&bloodSuger<=100;
if(stature>1.45&&eyeSight>0.8&&boo)
System.out.println(woman.getName()+"符合当工人标准");
else
System.out.println(woman.getName()+"不符合当工人标准");
}
}
}
public abstract class Person {
public abstract void accept(Visitor v);//“双重分派核心方法”
}
public class Woman extends Person{
String name;
double stature;//身高
double eyeSight;//视力
int bloodSuger;//血糖
public Woman(String name, double stature, double eyeSight,int bloodSuger) {
super();
this.name = name;
this.stature = stature;
this.eyeSight = eyeSight;
this.bloodSuger=bloodSuger;
}
public void accept(Visitor v) {
// TODO Auto-generated method stub
v.visit(this);
}
public double getStature(){
return stature;
}
public double getEyeSight(){
return eyeSight;
}
public double getBloodSuger(){
return bloodSuger;
}
public String getName(){
return name;
}
}
public class Man extends Person{
String name;
double stature;//身高
double eyeSight;//视力
public Man(String name, double stature, double eyeSight) {
super();
this.name = name;
this.stature = stature;
this.eyeSight = eyeSight;
}
/*
* (non-Javadoc)
* @see Person#accept(Visitor)
* 通过此方法(接口),调用Visitor[ArmyVisitor/FactoryVisitor].visit()方法
*/
@Override
public void accept(Visitor v) {
// TODO Auto-generated method stub
v.visit(this);
}
public double getStature(){
return stature;
}
public double getEyeSight(){
return eyeSight;
}
public String getName(){
return name;
}
}
import java.util.ArrayList;
import java.util.Iterator;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Visitor armyVisitor=new ArmyVisitor();
Visitor factoryVisitor=new FactoryVisitor();
ArrayList<Person> personList=new ArrayList<Person>();//personList存所有person
Person person=null;
personList.add(person=new Man("张三",1.58,1.2));
personList.add(person=new Man("王五",1.77,1.5));
personList.add(person=new Woman("李花",1.67,1.2,67));
personList.add(person=new Woman("赵丽",1.42,0.9,70));
Iterator<Person> iter=personList.iterator(); //ArrayList赋给Iterator
while(iter.hasNext()){ //遍历Iterator
person=iter.next();
person.accept(armyVisitor); //军人
person.accept(factoryVisitor); //工人
}
}
/*
* person:男/女,根据性别有不同的体检数据
*/
}