Java进阶-设计模式-访问者模式

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

public String getAddress() {

return address;

}

}

复制代码

定义绿码成员:

package com.home.test.visitor.userInfo;

public class GreenCodePerson implements Person{

private String userName;

private String userPhone;

private String cardNo;

private String address;

// 疫苗

private String vaccine;

@Override

public void accept(Department department) {

department.visit(this);

}

public GreenCodePerson(String userName, String userPhone, String cardNo, String address, String vaccine) {

this.userName = userName;

this.userPhone = userPhone;

this.cardNo = cardNo;

this.address = address;

this.vaccine = vaccine;

}

public String getUserName() {

return userName;

}

public String getUserPhone() {

return userPhone;

}

public String getCardNo() {

return cardNo;

}

public String getAddress() {

return address;

}

public String getVaccine() {

return vaccine;

}

}

复制代码

定义访问者部门接口:

public interface Department {

void visit(RedCodePerson person);

void visit(GreenCodePerson person);

}

复制代码

定义医院部门访问实现类:

package com.home.test.visitor.userInfo;

public class DocDepartment implements Department {

@Override

public void visit(RedCodePerson person) {

System.out.printf(“红码人员:%s,手机号:%s,疫苗接种情况:%s,开始隔离!%n”,

person.getUserName(),

person.getUserPhone(),

person.getAddress());

}

@Override

public void visit(GreenCodePerson person) {

System.out.printf(“绿码人员:%s,手机号:%s,疫苗接种情况:%s,放回家.%n”,

person.getUserName(),

person.getUserPhone(),

person.getVaccine());

}

}

复制代码

定义乡镇访问实现类:

package com.home.test.visitor.userInfo;

/**

  • 乡镇获取权限: 姓名、手机号、接种情况、地址、身份证号

*/

public class VillageDepartment implements Department {

@Override

public void visit(RedCodePerson person) {

System.out.printf(“红码人员:%s,手机号:%s,身份证号:%s,地址:%s,请及时排查密接人员!%n”,

person.getUserName(),

person.getUserPhone(),

person.getCardNo(),

person.getAddress());

}

@Override

public void visit(GreenCodePerson person) {

System.out.printf(“绿码人员:%s,手机号:%s,身份证号:%s,疫苗接种情况:%s,”,

person.getUserName(),

person.getUserPhone(),

person.getCardNo(),

person.getVaccine());

if ((“未接种”).equals(person.getVaccine())) {

System.out.println(“请及时通知该人员接种疫苗”);

} else {

System.out.println(“请提醒多喝热水.”);

}

}

}

复制代码

定义测试Demo:

package com.home.test.visitor.userInfo;

import java.util.ArrayList;

import java.util.List;

public class ClientDemo {

public static void main(String[] args) {

List personList = new ArrayList() {{

add(new GreenCodePerson(“Job”, “13188880000”, “866111”, “New Work”, “未接种”));

add(new GreenCodePerson(“Job2”, “13188889999”, “866112”, “New Work”, “未接种”));

add(new GreenCodePerson(“Job3”, “13200000000”, “866113”, “New Work”, “已接种”));

add(new RedCodePerson(“李富贵”, “13200000001”, “866114”, “New Work”));

}};

System.out.println(“------------------------医院权限查看------------------------”);

DocDepartment docDepartment = new DocDepartment();

personList.forEach(person -> person.accept(docDepartment));

System.out.println(“------------------------乡镇部门权限查看------------------------”);

VillageDepartment villageDepartment = new VillageDepartment();

personList.forEach(person -> person.accept(villageDepartment));

}

}

复制代码

输出结果:

------------------------医院权限查看------------------------

绿码人员:Job,手机号:13188880000,疫苗接种情况:未接种,放回家.

绿码人员:Job2,手机号:13188889999,疫苗接种情况:未接种,放回家.

绿码人员:Job3,手机号:13200000000,疫苗接种情况:已接种,放回家.

红码人员:李富贵,手机号:13200000001,疫苗接种情况:New Work,开始隔离!

------------------------乡镇部门权限查看------------------------

绿码人员:Job,手机号:13188880000,身份证号:866111,疫苗接种情况:未接种,请及时通知该人员接种疫苗

绿码人员:Job2,手机号:13188889999,身份证号:866112,疫苗接种情况:未接种,请及时通知该人员接种疫苗

绿码人员:Job3,手机号:13200000000,身份证号:866113,疫苗接种情况:已接种,请提醒多喝热水.

红码人员:李富贵,手机号:13200000001,身份证号:866114,地址:New Work,请及时排查密接人员!

复制代码

说明

访问者模式属于行为设计模式的一种,当我们要对一组相似类型的对象执行操作的时候使用它。

访问者模式的帮助下,我们可以将操作逻辑从对象移动到另一个类。

访问者模式由两部分组成:

一个名为 Visit() 的方法,由访问者实现,并为数据结构中的每个元素调用

提供接受访问者的 Accept() 方法的可访问类

最后

本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们

目录:

全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)

Java面试核心知识点

一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!

全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)

Java面试核心知识点

已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了

全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们

目录:

[外链图片转存中…(img-JMFTpYiE-1714500980532)]

Java面试核心知识点

一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!

[外链图片转存中…(img-ubkGzdCC-1714500980532)]

Java面试核心知识点

已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了

[外链图片转存中…(img-Ndmz6eEM-1714500980532)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值