首先声明一个状态
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);
}
}