第二十三讲:访问者模式
访问者设计模式是最难的设计模式.
Object Structure:公园
Element:是一个抽象,可以是一个接口或者是抽象类.是公园的每一个部分的抽象.
Concrete Element:实际的元素角色.公园的A部分或者是公园的B部分.accept()接待人.
Visitor:抽象的访问者.
Concrete Visitor:清洁工A或者是清洁工B.visit()访问.
对象角色结构Object Structure:Park
Element:ParkElement.公园的每一部分的抽象.
ConcreteElement:ParkA和ParkB.
访问者:Visitor
访问者的具体实现:清洁工AVisitor和清洁工BVisitorB.
Park是用来接收访问者的,它里面没有任何输出的,是没有任何方法的实现的.
输出是由访问者实现的,访问者是如何实现的就看它里面的visit()方法是如何实现的.
public void visit(Park park) {//除了是结合你的不同的重载方法以外,还可以获得park的数据.
public class MainClass {public static void main(String[] args) {Park park = new Park();park.setName("越秀公园");//清洁工AVisitorA visitorA = new VisitorA();park.accept(visitorA);//清洁工BVisitorB visitorB = new VisitorB();park.accept(visitorB);VisitorManager visitorManager = new VisitorManager();park.accept(visitorManager);}}
public class Park implements ParkElement {private ParkA parkA;private ParkB parkB;private String name;//假设公园是有名字的.public Park() {super();// TODO Auto-generated constructor stubthis.parkA = new ParkA();this.parkB = new ParkB();parkA.setName("A");parkB.setName("B");}@Overridepublic void accept(Visitor visitor) { // TODO Auto-generated method stubvisitor.visit(this);//把Park传入进去 parkA.accept(visitor);parkB.accept(visitor);}public String getName() {return name;}public void setName(String name) {this.name = name;}}
/** 公园的A部分*/ public class ParkA implements ParkElement {private String name;@Overridepublic void accept(Visitor visitor) {// TODO Auto-generated method stubvisitor.visit(this);//把ParkA传进去 }public String getName() {return name;}public void setName(String name) {this.name = name;}}
/** 公园的B部分* */ public class ParkB implements ParkElement{private String name;@Overridepublic void accept(Visitor visitor) {// TODO Auto-generated method stubvisitor.visit(this);//把ParkB传进去 }public String getName() {return name;}public void setName(String name) {this.name = name;}}
/** 公园每一部分的抽象* */ public interface ParkElement {//用来接纳访问者public void accept(Visitor visitor); }
/** * 访问者*/ public interface Visitor {public void visit(Park park);public void visit(ParkA parkA);public void visit(ParkB parkB); }
/** 清洁工A,服务parkA的卫生情况* 清洁工A,负责parkA的卫生情况*/ public class VisitorA implements Visitor {@Overridepublic void visit(Park park) {// TODO Auto-generated method stub }@Overridepublic void visit(ParkA parkA) {// TODO Auto-generated method stubSystem.out.println("清洁工A:完成公园"+parkA.getName()+"的卫生");}@Overridepublic void visit(ParkB parkB) {// TODO Auto-generated method stub }}
/** 清洁工B,负责公园B部分的卫生* */ public class VisitorB implements Visitor{@Overridepublic void visit(Park park) {// TODO Auto-generated method stub }@Overridepublic void visit(ParkA parkA) {// TODO Auto-generated method stub }@Overridepublic void visit(ParkB parkB) {// TODO Auto-generated method stub//System.out.println("清洁工B:完成公园B的卫生");System.out.println("清洁工B:完成公园" + parkB.getName()+"的卫生");}}
public class VisitorManager implements Visitor{@Overridepublic void visit(Park park) {//除了是结合你的不同的重载方法以外,还可以获得park的数据.// TODO Auto-generated method stub//System.out.println("管理员:负责公园卫生检查"); System.out.println("管理员:负责"+park.getName()+"卫生检查"); }@Overridepublic void visit(ParkA parkA) {// TODO Auto-generated method stubSystem.out.println("管理员:负责公园"+parkA.getName()+"部分卫生检查");}@Overridepublic void visit(ParkB parkB) {// TODO Auto-generated method stubSystem.out.println("管理员:负责公园"+parkB.getName()+"部分卫生检查");}}
转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/6750329.html
第二十三讲:访问者模式相关推荐
- 开环直流电机的机械特性_第二十三讲 20直流PWM变换器-电动机系统及开环调速系统机械特性.ppt...
第二十三讲 20直流PWM变换器-电动机系统及开环调速系统机械特性 谢谢! 本讲结束 * * 电力传动控制系统 上海开放大学 * 第二十三讲 直流PWM变换器-电动机系统及开环调速系统机械特性 * 不 ...
- 织梦仿站系列教程第二十三讲——列表页制作(二)
织梦后台提示用户名不存在 查看数据库用户名被改为spider 织梦仿站系列教程第二十三讲--列表页制作(二) 这一讲,我们讲下列表页的分页代码,先找到如下代码: 865 1 href="ht ...
- 第二十三讲 解一阶微分方程组
例题 {u1′=−u1+2u2u1′=u1−2u2\left\{\begin{matrix}{u_{1}}'=-u_{1}+2u_{2}\\ {u_{1}}'=u_{1}-2u_{2}\end{mat ...
- 第二十二讲:自尊与自我实现 第二十三讲:总结(完)
(注:此为课程第二十二课,更新于2017年7月23日.) 今天我们会讲完自尊,然后下节课将是我们这个学期最后一次课.我会总结一下我们讲过的内容,我们讲过的和我们将要讲的内容. 先回顾一下我们讲过的,就 ...
- 第二十三讲 狄拉克函数(冲激函数)
一,脉冲及建立模型 在一个时间区间上的作用等于,如果是恒定的,则 如图: 在小车上作用一个脉冲(一个力使小车左移或右移一段时间),假设时间从0到h,冲量是1(曲线下的面积是1)如图: 假设没有阻尼,弹 ...
- Java SE 第二十三讲----static关键字and final关键字
1.static关键字 [在二十二讲视频中30分钟开始讲授] 2.static修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量:一个对象对该静态成员变量进行了修改,其他 ...
- halcon第二十三讲:标定助手标定测量
1.生成标定板 文件ps格式,可通过ps软件打印出来, 以及标定板的描述文件descr格式 gen_caltab (7, 7, 0.0125, 0.5, 'caltab.descr', 'caltab ...
- 第二十三讲 狄拉克函数(冲激函数)(补充)
四,例题: 如图,假设没有阻尼,弹簧常数,在的瞬间,输入一个冲量A,单位冲量为 建立数学模型: 初始条件:(初始位置),(初始速度) 第一步:两边拉式变换 左边: 代入初始条件:, 左边: 右边:(利 ...
- 第二十三讲 常用技术标准【2021年软考-高级信息系统项目管理师】
27. 常用技术标准 27.1 标准化分类代码 我国标准的级别:标准可以分为国际标准.国家标准.行业标准.地方标准及企业标准等.国际标准主要是指由国际标准化组织 (ISO)制定和批准的标准. 国家标准 ...
最新文章
- 分割 标注数据_7种常用的数据标注工具
- Spring源码解析-三级缓存与循环依赖,nginx架构图
- 3D数学基础:图形与游戏开发---随笔四
- boost::multiprecision模块实现打印出所有的阶乘 这将适合一个 128 位整数相关的测试程序
- JS 获取浏览器、显示器 窗体等宽度和高度
- mysql performance tuning_MySQL Performance tuning
- android- Auto Monitor Logcat
- Mac安装brew及报错处理办法
- an 转换器_400V耐压场效应管替代IRF730B型号参数,使用在DC-DC电源转换器。_场效应管吧...
- django实现上传文件并保存
- Linux2.6信号管理
- dllimport 找不到指定的模块_Python语法基础(15)模块与包
- 计算机-库win10,Win10游戏运行库合集32/64位 官方最新版
- 【datawhale-gitmodel】以波士顿房价数据进行数据分析和数据可视化
- 雷电云手机无限雷币版v1.60
- 第十三章:(1)CompletableFuture异步回调
- 2020年Android GMS 认证 boot logo 最新要求
- thinkadmin按配置上传文件至本地,七牛云或阿里oss
- 程序猿真的觉得写代码比女朋友重要吗?
- ×××网站与***的秘密
热门文章
- 英伟达RTX 3080值不值得抢?在TensorFlow上训练了卷积网络
- C++中string、char[]、char*之间的转换
- MLSQL解决了什么问题
- 图像处理(二十四)Gradient Domain High Dynamic Range Compression学习笔记
- rbf核函数_高斯过程回归础(使用GPy和模拟函数数据集)
- ESXI忘记密码怎么办
- 语言 双线性内插_数位语音信号处理概论 Lesson6 语言模型
- python脚本在linux上运行的两种方式_python脚本当作Linux中的服务启动实现方法
- Objective-C 日记④ 集合家族
- 清理神器CleanMyMac X 空间透镜——可视化您的磁盘空间