设计模式 访问者模式

首先声明一个状态

package action;

import Person.Man;
import Person.Woman;

public abstract class Action {
	public abstract void GetManConclusion(Man concreteElementA);
	public abstract void GetWomanConclusion(Woman concreteElementB);
}

然后写两个具体的状态

package action;
import Person.Man;
import Person.Woman;

public class Failing extends Action {

	@Override
	public void GetManConclusion(Man concreteElementA) {
		// TODO Auto-generated method stub
		System.out.println(concreteElementA.toString()+this.getClass()+"时,喝酒");

	}

	@Override
	public void GetWomanConclusion(Woman concreteElementB) {
		// TODO Auto-generated method stub
		System.out.println(concreteElementB.toString()+this.getClass()+"时,拍a");

	}

}

package action;
import Person.Man;
import Person.Woman;

public class Success extends Action {

	@Override
	public void GetManConclusion(Man concreteElementA) {
		// TODO Auto-generated method stub
		System.out.println(concreteElementA.toString()+this.getClass()+"时,背后多半有一个伟大的女人");

	}

	@Override
	public void GetWomanConclusion(Woman concreteElementB) {
		// TODO Auto-generated method stub
		System.out.println(concreteElementB.toString()+this.getClass()+"时,背后多半有一个不成功的男人");

	}

}

再写Person类

package Person;
import action.Action;

public abstract class Person {


	public abstract void Accept(Action visitor);
	
	
}

man

package Person;
import action.Action;

public class Man extends Person {

	@Override
	public void Accept(Action visitor) {
		// TODO Auto-generated method stub
		visitor.GetManConclusion(this);
	}


}

woman

package Person;
import action.Action;

public class Woman extends Person {

	@Override
	public void Accept(Action visitor) {
		// TODO Auto-generated method stub
		visitor.GetWomanConclusion(this);
	}



}

写一个结构作为访问

package struct;

import java.util.ArrayList;
import java.util.List;

import Person.Person;
import action.Action;

public class ObjectStructure {

	private List<Person> elements = new ArrayList<Person>();
	
	public void Attach(Person element)
	{
		elements.add(element);
	}
	
	public void Detach(Person element)
	{
		elements.remove(element);
	}
	
	public void Display(Action visitor)
	{
		for (Person person : elements) {
			person.Accept(visitor);
		}
	}
}

最后写测试类

import java.util.ArrayList;
import java.util.List;

import Person.Man;
import Person.Person;
import Person.Woman;
import action.Failing;
import action.Success;
import struct.ObjectStructure;

public class Program {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ObjectStructure objectStructure = new ObjectStructure();
		objectStructure.Attach(new Man());
		objectStructure.Attach(new Woman());
		
		Success v1=new Success();
		objectStructure.Display(v1);
		
		Failing v2=new Failing();
		objectStructure.Display(v2);
		

	}

}

原文地址:https://www.cnblogs.com/yufenghou/p/6056635.html