首页 > 其他分享 >设计模式-访问者模式

设计模式-访问者模式

时间:2023-10-31 21:48:33浏览次数:25  
标签:name Students void Visit 模式 new 设计模式 public 访问者

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);
    }
}

 

标签:name,Students,void,Visit,模式,new,设计模式,public,访问者
From: https://www.cnblogs.com/cinan/p/17801619.html

相关文章

  • 设计模式-策略模式
    publicclass策略模式{publicstaticvoidmain(String[]args){Strategyadd=newConcreteStrategyA();Strategysub=newConcreteStrategyB();Strategymultiply=newConcreteStrategyC();OperationContextcontext=newOpera......
  • 光波导中模式理解-2
    光波导中模式理解-2(含脚本实例)参考文献[1]H.Wenzel,P.Crump,J.Fricke,P.ResselandG.Erbert,"SuppressionofHigher-OrderLateralModesinBroad-AreaDiodeLasersbyResonantAnti-Guiding,"inIEEEJournalofQuantumElectronics,vol.49,no.12,pp.11......
  • 阿里大佬:DDD落地两大步骤,以及Repository核心模式
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • 软件设计-状态模式
    publicclass状态模式{publicstaticvoidmain(String[]args){Contextcontext=newContext();context.Request();context.Request();context.Request();//System.out.println(context.getState());context......
  • Ubuntu下编译最新版本全志开源FEL模式工具sunxi-tools
    1、sunxi-tools介绍sunxi-tools是一组用于全志SoC系列芯片的开源命令行工具,全志的SoC一般以sun开头,x为数字,以i结尾。对于sun4i,sun5i,sun6,sun8i,sun9i.等等系列都可以使用这个工具。比如手上的这个板子是H616,它的名字是sun50i-H616。sunxi-tools是一组工具集,这组工具可以用于对全......
  • 设计模式(一)
    1设计模式什么是设计模式?一个问题通常由n种解法,其中肯定有一种解法是最优的,这个最优的解法被人总结出来了,称之为设计模式。设计模式有20多种,对应20多种软件开发中会遇到的问题。关于设计模式的学习,主要学什么?1)解决什么问题?2)怎么写?2单例设计模式简介:确保一个类只有一个对......
  • 设计模式(十)外观
    一、定义为子系统中的一组接口提供一个一致的入口,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式是一种结构型模式。二、描述包含以下两个角色:1、Facade(外观角色):在客户端可以调用它的方法,在外观角色中可以知道相关的(一个或多个)子系统的功能和责任;在......
  • Redis集群模式incr保证原子性的原理
    1.主要是redis的key会解析到固定的主机上,比如集群上有host1,host2,host3;然后key1可能会解析后发现是要发到host2上,则在host2正常的情况下(有点像kafkarebalance;consumer处理哪些分区),key1会一直在host2上进行操作;因此在redis集群正常情况下不会出现对key1第一次incr是在host2,第二次......
  • 设计模式-享元模式
    importjava.nio.channels.Pipe;publicclass享元模式{publicstaticvoidmain(String[]args){pieceFactoryfactory=newpieceFactory();PiecewhitePiece=factory.getPiece(0);PiecewhitePiece1=factory.getPiece(1);Pie......
  • 查看调整cpu频率及模式
    使用cpufrequtils查看调整cpu频率及模式cpufrequtils是一个查看和修改CPU频率GHz的工具有些物理服务器使用默认频率进行运行,这时可以使用该工具进行就该CPU的核心频率安装:aptinstallcpufrequtilsyuminstallcpufrequtils使用:#查看全部核心详细信息cpufreq-info#查......