设计模式之访问者模式

访问者模式

访问者模式UML.png

例子以公司招聘查看简历为背景

interface Visitor{
    void visitClerical(Clerical clerical);//查看文员简历
    void visitCoder(Coder coder);//查看程序员简历
}    

访问者接口,分别对ElementA与ElementB进行访问

class HRVisitor{
    public void visitClerical(Clerical clerical){
        //HR关注文员简历XXXXX
    }
    
    public void visitCoder(Coder coder){
        //HR看码农简历,看经验看学校
    }
}

HR访问者

class CTOVisitor{
    public void visitClerical(Clerical clerical){
        //CTO不关心文员简历,可是是空实现
    }
    
    public void visitCoder(Coder coder){
        //CTO看码农简历,看项目 看技能
    }
}

CTO访问者

abstract class JobSeeker{
    public String name;
    public String school;
    public String skill;
    
    public JobSeeker(String name ,String school ,String skill){
        this.name = name;
        this.school = school;
        this.skill = skill;
    }
    
    public abstract void accept(Visitor visitor);
}

抽象求职者类

class Clerical extends JobSeeker{
    public Clerical(String name ,String school ,String skill){
        super(name , school , skill);
    }
    public void accept(Visitor visitor){
        visitor.visitClerical(this);
    }
}

文员求职者

class Coder extends JobSeeker{
    public Coder(String name ,String school ,String skill){
        super(name , school , skill);
    }
    public void accept(Visitor visitor){
        visitor.visitCoder(this);
    }
}

码农求职者

public class JobStructure{
    List<JobSeeker> list = new ArrayList<>();
    
    public void seeResume(Visitor visitor){
        for(JobSeeker jobSeeker : list){
            jobSeeker.accept(visitor);
        }
    }
    
    public void addJobSeeker(JobSeeker jobSeeker){
        list.add(jobSeeker);
    }
}   

查阅简历类

class CLient{
    public static void main(String[] args){
        JobStructure jobStructure = new JobStructure();
        jobStructure.addJobSeeker(new Coder("小强","清华","Android"));
        jobStructure.addJobSeeker(new Coder("小民","北大","Word"));
        jobStructure.seeResume(new CTOVisitor());
        jobStructure.seeResume(new HRVisitor());
    }
}   

客户端类,收集简历,CTO查看简历,HR查看简历

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 引入访问者模式 访问者模式的实例 访问者模式分析 引入访问者模式 Visitor是访问者的意思。数据结构中保存着元...
    六尺帐篷阅读 8,881评论 0 4
  • 这个世界形形色色,人或风景都各有不同,很多时间为了生计在奔波,都快忘了,该怎么去生活。如果有什么还记得,那一定是年...
    若水浮生阅读 1,878评论 0 0
  • 今天是8月31日,转眼间暑假就过了,要回到校园去疯狂学习了,说实话,还挺高兴,因为这或许是我人生中最后一段...
    奔跑的阿权阅读 2,801评论 0 0
  • 每一天我都在愚蠢的找死今天终于得到了回复 “您好,很高兴为您服务” “我不高兴,为什么这么久了你才回复我,是不是因...
    哈吉斯阅读 942评论 0 1
  • 女儿刚上幼园不久。一个星期天的早上,我和她在玩识字游戏。我边写边对她说:“幺儿,我们来规纳下,汉字中最简单、也就...
    常青滕阅读 1,560评论 1 1