访问者模式

 


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:男/女,根据性别有不同的体检数据
	 */

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值