Java 实现访问者(Visitor)模式
2014-10-14 12:56
609 查看
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
相关文章推荐
- 设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 访问者模式(Visitor) - Java实现
- Groovy与JAVA实现Visitor模式的对比
- java设计模式-访问者模式(Visitor)
- 设计模式实现(二十四)---访问者模式(Visitor)
- 浅谈Java设计模式(二十一)访问者模式(Visitor)
- java -访问者模式实现用户登录模块
- Java设计模式-----Visitor访问者模式
- 大话设计模式--访问者模式 Visitor -- C++实现实例
- 设计模式学习笔记--解释器模式Interpreter与访问者模式Visitor(Java版)
- Java设计模式菜鸟系列(二十三)访问者模式建模与实现
- Java设计模式之--访问者模式(Visitor)
- JAVA设计模式十四--Visitor(访问者模式)
- 设计模式(二十三)----- 访问者模式(visitor)----(JAVA版)
- Java Tip: 用Reflection实现Visitor模式
- 在组合模式中实现访问者(Visitor)模式
- java设计模式之访问者模式 Visitor
- 在组合(Composite)模式中实现访问者(Visitor)模式
- JAVA设计模式十四:--Visitor(访问者模式)
- Java设计模式(三) Visitor(访问者)模式及多分派场景应用
- Java设计模式-访问者模式(Visitor)