设计模式之Visitor模式(笔记)
来源:互联网 发布:有趣的网站 知乎 网盘 编辑:程序博客网 时间:2024/06/03 21:03
访问者模式:表示一个作用于某个对象结构中的各元素操作。它使你可以不改变各元素的类的前提下定义作用于这些元素的新操作。
首先定义一个visitor抽象类,为每个具体类声明一个visit操作
public abstract class Visitor { public abstract void visitConcreteElementA(ConcreteElementA elementA); public abstract void visitConcreteElementB(ConcreteElementB elementB);}
接着定义继承visitor的具体类
public class ConcreteVisitor1 extends Visitor{ @Override public void visitConcreteElementA(ConcreteElementA elementA) { System.out.println(elementA.getClass().getName()+"访问"+this.getClass().getName()); } @Override public void visitConcreteElementB(ConcreteElementB elementB) { System.out.println(elementB.getClass().getName()+"访问"+this.getClass().getName()); }}public class ConcreteVisitor2 extends Visitor{ @Override public void visitConcreteElementA(ConcreteElementA elementA) { System.out.println(elementA.getClass().getName()+"访问"+this.getClass().getName()); } @Override public void visitConcreteElementB(ConcreteElementB elementB) { System.out.println(elementB.getClass().getName()+"访问"+this.getClass().getName()); }}
然后定义一个Element抽象类,定义一个Accept方法
public abstract class Element { public abstract void accept(Visitor visitor);}
接着定义继承Element的具体类
public class ConcreteElementA extends Element{ @Override public void accept(Visitor visitor) { visitor.visitConcreteElementA(this); } public void operationA(){ }}public class ConcreteElementB extends Element{ @Override public void accept(Visitor visitor) { visitor.visitConcreteElementB(this); } public void operationB(){ }}
然后定义一个ObjectStructure类,用来枚举它的元素
public class ObjectStructure { private List<Element> elements=new ArrayList<Element>(); public void attach(Element element){ elements.add(element); } public void detach(Element element){ elements.remove(element); } public void accept(Visitor visitor){ Iterator<Element> iterator=elements.iterator(); while(iterator.hasNext()){ Element element=iterator.next(); element.accept(visitor); } }}
客户端代码
public static void main(String[] args) { //访问者模式 ObjectStructure oStructure=new ObjectStructure(); oStructure.attach(new ConcreteElementA()); oStructure.attach(new ConcreteElementB()); ConcreteVisitor1 visitor1=new ConcreteVisitor1(); ConcreteVisitor2 visitor2=new ConcreteVisitor2(); oStructure.accept(visitor1); oStructure.accept(visitor2); }
0 0
- 设计模式之Visitor模式(笔记)
- 设计模式(c++)笔记之二十(Visitor模式)
- 设计模式之Visitor
- 设计模式之Visitor
- 设计模式之Visitor
- 设计模式之Visitor
- 设计模式之Visitor
- 设计模式之Visitor
- 设计模式之Visitor
- 设计模式之 visitor
- 设计模式之Visitor
- 设计模式之访问者模式(visitor)
- 设计模式之访问者模式(Visitor)
- 设计模式之visitor模式
- 设计模式(二十一)之 Visitor
- 笔记:Gof设计模式--Visitor
- 设计模式之 Visitor 模式(访问者模式)
- 设计模式之Visitor(转)
- 使用中文等号报错
- Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的分布式版本控制软件,它不同于Subversion、CVS这样的集中式版本控制系统。在集中式版本控制系统
- uilabel实现自动换行
- Bestcoder #47 B Senior's Gun
- 二、搜索
- 设计模式之Visitor模式(笔记)
- POJ 2192 Zipper
- qt 的 signals宏和slots宏
- uvalive 3363(区间dp)
- java.util.ArrayList.indexOf(Object) 方法
- 自定义语言的实现——解释器模式
- Linux测试标准------stress压力测试
- android 蓝牙学习资料
- #20 Valid Parentheses