设计模式-访问者模式

复制代码
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);
    }
}
复制代码

 

posted @   辞楠  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示