찾다
Javajava지도 시간방문자 모드 코드의 Java 구현에 대한 자세한 설명

방문자 모드 코드의 Java 구현에 대한 자세한 설명

interface Visitor {
	void visit(Gladiolus g);

	void visit(Chrysanthemum c);
}
// concrete visitor		名称访问
class StringVisitor implements Visitor {
	String s;

	public String toString() {
		return s;
	}

	public void visit(Gladiolus g) {
		s = "Gladiolus";
	}

	public void visit(Chrysanthemum c) {
		s = "Chrysanthemum";
	}
}
// concrete visitor		蜜蜂访问
class BeeVisitor implements Visitor {
	public void visit(Gladiolus g) {
		System.out.println("蜜蜂 来 访问 Gladiolus");
	}

	public void visit(Chrysanthemum c) {
		System.out.println("蜜蜂 来 访问 Chrysanthemum");
	}
}
interface Flower {
	void accept(Visitor v);
}
/*
 * concrete element		菊花
 */
class Chrysanthemum implements Flower {
	public void accept(Visitor v) {
		v.visit(this);
	}
}
// concrete element		剑兰
class Gladiolus implements Flower {
	public void accept(Visitor v) {
		v.visit(this);
	}
}
//这是Flower一个对象生成器
class FlowerGenerator {
	private static Random rand = new Random();

	public static Flower newFlower() {
		switch (rand.nextInt(2)) {
		default:
		case 0:
			return new Gladiolus();
		case 1:
			return new Chrysanthemum();
		}
	}
}
/*
 * 访问者(Visitor)模式		行为型模式
 * 在不修改已有程序结构的前提下,通过添加额外的“访问者”来完成对已有代码功能的提升
 * 简单来说,访问者模式就是一种分离对象数据结构与行为的方法,通过这种分离,可达到为一个被访问者动态添加新的操作而无需做其它的修改的效果
 * 缺点:增加新的元素类,比较困难,因为需要修改抽象访问者的接口及实现,违反开-闭 原则
 */
public class Test {
	/*
	 * 首先在客户端先获得一个具体的访问者角色 遍历对象结构 对每一个元素调用accept方法,将具体访问者角色传入 这样就完成了整个过程
	 */
	public static void main(String args[]) {
		List<Flower> flowers = new ArrayList<Flower>();
		for (int i = 0; i < 10; i++)
			flowers.add(FlowerGenerator.newFlower());
		Visitor visitor = new StringVisitor();
		Iterator<Flower> iterator = flowers.iterator();
		while (iterator.hasNext()) {
			iterator.next().accept(visitor);
			System.out.println(visitor);
		}
		System.out.println("---------------");
		/*
		 * 一个新的访问行为 :BeeVisitor 蜜蜂访问
		 */
		Visitor visitor2 = new BeeVisitor();
		for (Flower flower : flowers) {
			flower.accept(visitor2);
		}

	}
}

인쇄

Gladiolus
Chrysanthemum
Chrysanthemum
Gladiolus
Chrysanthemum
Chrysanthemum
Chrysanthemum
Chrysanthemum
Gladiolus
Gladiolus
---------------
蜜蜂 来 访问 Gladiolus
蜜蜂 来 访问 Chrysanthemum
蜜蜂 来 访问 Chrysanthemum
蜜蜂 来 访问 Gladiolus
蜜蜂 来 访问 Chrysanthemum
蜜蜂 来 访问 Chrysanthemum
蜜蜂 来 访问 Chrysanthemum
蜜蜂 来 访问 Chrysanthemum
蜜蜂 来 访问 Gladiolus
蜜蜂 来 访问 Gladiolus

위 내용은 방문자 모드 코드의 Java 구현에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
带你搞懂Java结构化数据处理开源库SPL带你搞懂Java结构化数据处理开源库SPLMay 24, 2022 pm 01:34 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

Java集合框架之PriorityQueue优先级队列Java集合框架之PriorityQueue优先级队列Jun 09, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

完全掌握Java锁(图文解析)完全掌握Java锁(图文解析)Jun 14, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

一起聊聊Java多线程之线程安全问题一起聊聊Java多线程之线程安全问题Apr 21, 2022 pm 06:17 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

详细解析Java的this和super关键字详细解析Java的this和super关键字Apr 30, 2022 am 09:00 AM

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

Java基础归纳之枚举Java基础归纳之枚举May 26, 2022 am 11:50 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

java中封装是什么java中封装是什么May 16, 2019 pm 06:08 PM

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

归纳整理JAVA装饰器模式(实例详解)归纳整理JAVA装饰器模式(实例详解)May 05, 2022 pm 06:48 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于设计模式的相关问题,主要将装饰器模式的相关内容,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式,希望对大家有帮助。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기