扩展型模式之Visitor(访问者)模式
来源:互联网 发布:windows snmp 编辑:程序博客网 时间:2024/05/23 01:18
1.如果你期望允许开发者定义新操作,而无需更改类层次,可使用Visitor(访问者)模式
2.举例
//访问者接口interface IVisitor { void visit(Node node);}
//节点抽象类abstract class Node { abstract void accept(IVisitor iVisitor); abstract void doSomethings();}
//节点A类:接受访问者并告知访问对象时自己public class NodeA extends Node{ @Override void accept(IVisitor iVisitor) { // TODO Auto-generated method stub iVisitor.visit(this); } @Override void doSomethings() { // TODO Auto-generated method stub System.out.println("NodeA do it"); }}
//节点B类:接受访问者并告知访问对象时自己public class NodeB extends Node{ @Override void accept(IVisitor iVisitor) { // TODO Auto-generated method stub iVisitor.visit(this); } @Override void doSomethings() { // TODO Auto-generated method stub System.out.println("NodeB do it"); }}
//第一个访问者:访问传入的节点public class FirstVisitor implements IVisitor{ @Override public void visit(Node node) { // TODO Auto-generated method stub System.out.print("FirstVisitor "); node.doSomethings(); }}
//第二个访问者:访问传入的节点public class SecondVisitor implements IVisitor{ @Override public void visit(Node node) { // TODO Auto-generated method stub System.out.print("SecondVisitor "); node.doSomethings(); }}
import java.util.ArrayList;import java.util.List;//对象结构类:用于对Node集合的访问与添加管理public class ObjectStructure { private List<Node> nodes = new ArrayList<Node>(); public void doIt(IVisitor iVisitor){ for(Node node : nodes){ node.accept(iVisitor); } } public void add(Node node){ nodes.add(node); }}
//测试类public class Test { public static void main(String[] args) { ObjectStructure os = new ObjectStructure(); os.add(new NodeA()); os.add(new NodeB()); //根据访问者来进行访问 os.doIt(new FirstVisitor()); os.doIt(new SecondVisitor()); }}
//结果FirstVisitor NodeA do itFirstVisitor NodeB do itSecondVisitor NodeA do itSecondVisitor NodeB do it
3.总结:Visitor(访问者)模式的意图在于让代码用户能够在不修改现有类层次结构的前提下,定义该类层次结构操作。accep()方法通过采用“两次分发”技术将调用结果返回给访问器类。visit()方法定义在访问器类中,类层次结构中的某个类对象可以根据其类型调用合适的visit()方法。
4.参考:http://www.cnblogs.com/java-my-life/archive/2012/06/14/2545381.html
0 0
- 扩展型模式之Visitor(访问者)模式
- 设计模式之访问者模式(visitor)
- 设计模式之访问者模式(Visitor)
- 行为型模式之访问者模式(Visitor)
- 行为型模式之访问者模式(Visitor)
- 访问者(Visitor)模式
- 访问者模式(Visitor)
- Visitor(访问者模式)
- 访问者模式(Visitor)
- 访问者模式(Visitor)
- 访问者(Visitor)模式
- 访问者(Visitor)模式
- 访问者(visitor)模式
- 访问者模式(Visitor)
- 访问者模式(Visitor)
- 访问者模式(Visitor)
- 访问者模式(Visitor)
- 访问者模式(Visitor)
- Unity3D 学习笔记7 —— 获取热更新资源文件的MD5码
- android 面试经典(5)
- 10021---Compose and Model the Merchandise Shop
- OC中的委托实例
- Catch That Cow
- 扩展型模式之Visitor(访问者)模式
- 辉光特效
- bzoj3930【CQOI2015】选数
- Java中的hashCode二
- Bencode的编码与解码
- 解决pip install 时locale.Error: unsupported locale setting
- android面试经典(6)
- c++作业3
- [前端 2]常用的JQuery和Dom页面取值与赋值