读设计模式之禅--访问者模式

  • 定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
package design.visitor;

/**
 * @Author: hyh
 * @Date: 2021/8/27 15:10
 **/
public abstract class Employee {


    private String name;
    private String sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public abstract void accept(IVisitor visitor);
}
class CommonEmployee extends Employee{

   private  String job;

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }
    public void job(){
        System.out.println("我的工作是" + this.job);
    }

    @Override
    public void accept(IVisitor visitor) {
        visitor.voist(this);
    }
}
class Manager extends Employee{

    private String report;

    public String getReport() {
        return report;
    }

    public void setReport(String report) {
        this.report = report;
    }

    public void report(){
        System.out.println("本季度报表情况" + this.report);
    }

    @Override
    public void accept(IVisitor visitor) {
        visitor.voist(this);
    }
}
// 抽象一个访问者接口
interface IVisitor{

    void voist(Manager manager);
    void voist(CommonEmployee common);

}
class Vistor implements IVisitor{


    @Override
    public void voist(Manager manager) {
        this.getManageInfo(manager);
    }

    @Override
    public void voist(CommonEmployee common) {
        this.getCommonEmployeeInfo(common);
    }

    public void getCommonInfo(Employee e){
        System.out.println("员工姓名:"+ e.getName());
        System.out.println("员工性别:"+ e.getSex());
    }

    public void getManageInfo(Manager manager){
        this.getCommonInfo(manager);
        manager.report();
    }

    public void getCommonEmployeeInfo(CommonEmployee common){
        this.getCommonInfo(common);
        common.getJob();
    }
}
class Test{
    public static void main(String[] args) {


        CommonEmployee commonEmployee = new CommonEmployee();
        commonEmployee.setJob("开发");
        commonEmployee.setName("张三");
        commonEmployee.setSex("男");


        Manager manager = new Manager();
        manager.setReport("创造营收500亿元");
        manager.setName("王经理");
        manager.setSex("女");


        commonEmployee.accept(new Vistor());
        manager.accept(new Vistor());
    }
}
输出:
员工姓名:张三
员工性别:男
员工姓名:王经理
员工性别:女
本季度报表情况创造营收500亿元
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值