首页 > Java > java教程 > 正文

Java实现访问者(Visitor)模式代码详解

黄舟
发布: 2017-03-11 11:37:23
原创
1519人浏览过

java实现访问者(visitor)模式代码详解

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);
		}

	}
}
登录后复制

打印

ExcelFormulaBot
ExcelFormulaBot

在AI帮助下将文本指令转换为Excel函数公式

ExcelFormulaBot 129
查看详情 ExcelFormulaBot
Gladiolus
Chrysanthemum
Chrysanthemum
Gladiolus
Chrysanthemum
Chrysanthemum
Chrysanthemum
Chrysanthemum
Gladiolus
Gladiolus
---------------
蜜蜂 来 访问 Gladiolus
蜜蜂 来 访问 Chrysanthemum
蜜蜂 来 访问 Chrysanthemum
蜜蜂 来 访问 Gladiolus
蜜蜂 来 访问 Chrysanthemum
蜜蜂 来 访问 Chrysanthemum
蜜蜂 来 访问 Chrysanthemum
蜜蜂 来 访问 Chrysanthemum
蜜蜂 来 访问 Gladiolus
蜜蜂 来 访问 Gladiolus
登录后复制

以上就是Java实现访问者(Visitor)模式代码详解的详细内容,更多请关注php中文网其它相关文章!

相关标签:
java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号