设计模式-访问者模式

发布时间 2023-10-31 21:36:39作者: 辞楠
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);
    }
}