文档章节

行为型模式之五:访问者模式

奋斗到天明
 奋斗到天明
发布于 2015/08/27 17:40
字数 433
阅读 54
收藏 0

精选30+云产品,助力企业轻松上云!>>>

访问者模式通常使用在编译器中的解析器中,像Eclipse中JDT AST PARER。 基本上,一个访问者模式中有两个接口,访问者与元素。

访问者故事

有一个初次访问者来到纽约。他想访问这个城市,城市接受他的访问,一旦他开始访问,就会自动访问所有的东西,他可能不要调用方法,当他相去博物馆,旅行是全包的!

访问者模式的类图

访问者模式的步骤

类图显示了访问的步骤

   

处理流程如下 

1,一个 FirstTimeVisitor和City元素被创建。 

2,程序开始,输出“City accept a visitor”。 

3,City中定义的接受方法让访问者开始访问。 

4,接受访问者,调用覆盖的vist去访问城市。

访问者Java代码

import java.util.ArrayList;
 
interface Visitor {
  public void visit(City city);
  public void visit(Museum museum);
  public void visit(Park park);
}
 
class FirstTimeVisitor implements Visitor {
 
  @Override
  public void visit(City city) {
    System.out.println("I'm visiting the city!");
  }
 
  @Override
  public void visit(Museum museum) {
    System.out.println("I'm visiting the Museum!");
  }
 
  @Override
  public void visit(Park park) {
    System.out.println("I'm visiting the Park!");
  }
}
 
interface Element {
  public void accept(Visitor visitor);
}
 
class City implements Element {
 
  ArrayList places = new ArrayList();
 
  public City() {
    places.add(new Museum());
    places.add(new Park());
  }
 
  @Override
  public void accept(Visitor visitor) {
    System.out.println("City is accepting visitor.");
    visitor.visit(this);
 
    for (Element e : places) {
      e.accept(visitor);
    }
  }
}
 
class Museum implements Element {
  @Override
  public void accept(Visitor visitor) {
    System.out.println("Museum is accepting visitor.");
    visitor.visit(this);
  }
}
 
class Park implements Element {
  @Override
  public void accept(Visitor visitor) {
    System.out.println("Park is accepting visitor.");
    visitor.visit(this);
  }
 
}
 
public class TestVisitor {
  public static void main(String[] args) {
    FirstTimeVisitor visitor = new FirstTimeVisitor();
    City city = new City();
    city.accept(visitor);
  }
}

输出

City is accepting visitor.
I'm visiting the city!
Museum is accepting visitor.
I'm visiting the Museum!
Park is accepting visitor.
I'm visiting the Park!

Visitor模式在JDK中

javax.lang.model.element.AnnotationValue 显然使用了访问者模式,但是他不是常规项目使用项。

奋斗到天明
粉丝 19
博文 112
码字总数 82707
作品 0
昌平
程序员
私信 提问
加载中
请先登录后再评论。
行为型模式:访问者模式

文章首发:行为型模式:访问者模式 十一大行为型模式之十一:访问者模式。 简介 姓名 :访问者模式英文名 :Visitor Pattern价值观 :来访者便是客,招待就是个人介绍 :Represent an operat...

osc_wa6zijqd
04/16
1
0
Java经典设计模式(3):十一种行为型模式

Java经典设计模式共有21中,分为三大类:创建型模式(5种)、结构型模式(7种)和行为型模式(11种)。 本文主要讲行为型模式,创建型模式和结构型模式可以看博主的另外两篇文章:Java经典设...

飓风2000
2017/02/10
14
0
GoF的23种设计模式之行为型模式的特点和分类(2)

行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对...

osc_hlq50xpf
2019/06/05
7
0
Java设计模式之十 ---- 访问者模式和中介者模式

前言 2018年已经过去,新的一年工作已经开始,继续总结和学习Java设计模式。 在上一篇中我们学习了行为型模式的解释器模式(Interpreter Pattern)和迭代器模式(Iterator Pattern)。本篇则来学...

osc_wa4nx1sy
2019/02/13
4
0
两种语言实现设计模式(C++和Java)(十九:访问者模式)

在现实生活中,有些集合对象中存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式。例如,公园中存在多个景点,也存在多个游客,不同的游客对同一个景点的评价可能不同;医院医...

osc_ap8rqrw7
2019/08/21
6
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring heapdump 查找敏感信息

意义不大,乱写的辣鸡东西。

osc_jze5xfnz
11分钟前
9
0
Spark环境搭建(上)——基础环境搭建

Spark摘说 Spark的环境搭建涉及三个部分,一是linux系统基础环境搭建,二是Hadoop集群安装,三是Spark集群安装。在这里,主要介绍Spark在Centos系统上的准备工作——linux系统基础环境搭建。...

osc_qnf5stcu
13分钟前
0
0
vue中使用kindeditor富文本编辑器2

第一步,下载依赖 yarn add kindeditor  第二步,建立kindeditor.vue组件 <template> <div class="kindeditor"> <textarea :id="id" name="content" v-model="outContent"></tex......

osc_c1kk059r
14分钟前
0
0
由HashMap哈希算法引出的求余%和与运算&转换问题

1、引出问题   在前面讲解 HashMap 的源码实现时,有如下几点:   ①、初始容量为 1<<4,也就是24 = 16      ②、负载因子是0.75,当存入HashMap的元素占比超过整个容量的75%时,进行...

osc_gzy7qjj6
16分钟前
11
0
CentOS 7.4下使用yum安装MySQL5.7.20 最简单的

CentOS7默认数据库是mariadb, 但是 好多用的都是mysql ,但是CentOS7的yum源中默认好像是没有mysql的。 上一篇安装的是5.6的但是我想安装5.7的 yum安装是最简单的 尝试过编译安装各种问题,最...

osc_3b0dcpcm
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部