import java.util.ArrayList;
import java.util.List;
public class 访问者结构 {
public static void main(String[] args)
{
Visit visit1=new VisitA();
Visit visit2=new VisitB();
PersonStructure personStructure=new PersonStructure();
personStructure.Accept(visit1);
personStructure.Accept(visit2);
}
}
interface Visit{
public void visitStudent(Students student);
public void visitTeacher(Teachers teacher);
}
class VisitA implements Visit{
@Override
public void visitStudent(Students student)
{
System.out.println("访问者1访问学生:"+student.name);
}
@Override
public void visitTeacher(Teachers teacher)
{
System.out.println("访问者1访问老师:"+teacher.name);
}
}
class VisitB implements Visit{
@Override
public void visitStudent(Students student)
{
System.out.println("访问者2访问学生:"+student.name);
}
@Override
public void visitTeacher(Teachers teacher)
{
System.out.println("访问者2访问老师:"+teacher.name);
}
}
class PersonStructure{
private List<Persons> list=new ArrayList<>();
public PersonStructure()
{
list.add(new Students("张三"));
list.add(new Students("李四"));
list.add(new Students("王五"));
list.add(new Teachers("李老师"));
list.add(new Teachers("王老师"));
}
public void Accept(Visit visit)
{
for(Persons person:list)
{
person.Accept(visit);
}
}
}
abstract class Persons{
public String name;
public abstract void Accept(Visit visit);
}
class Students extends Persons{
public Students(String name)
{
this.name=name;
}
@Override
public void Accept(Visit visit)
{
visit.visitStudent(this);
}
}
class Teachers extends Persons{
public Teachers(String name)
{
this.name=name;
}
@Override
public void Accept(Visit visit)
{
visit.visitTeacher(this);
}
}
![]()