标签:
定义:封装一些作用于某种数据结构中的各元素的操作,他可以在不改变数据结构的前提下定义作用于这些元素的新的操作
类图:
代码:
public abstract class Element { public abstract void doSomething(); public abstract void accept(IVistor visitor); }
public class ConcreteElement1 extends Element{ @Override public void doSomething() { // TODO Auto-generated method stub } @Override public void accept(IVistor visitor) { // TODO Auto-generated method stub visitor.visit(this); } }
public class ConcreteElement2 extends Element{ @Override public void doSomething() { // TODO Auto-generated method stub } @Override public void accept(IVistor visitor) { // TODO Auto-generated method stub visitor.visit(this); } }
public interface IVistor { public void visit(ConcreteElement1 c); public void visit(ConcreteElement2 c); }
public class Visitor implements IVistor{ public void visit(ConcreteElement1 c){ c.doSomething(); } public void visit(ConcreteElement2 c){ c.doSomething(); } }优点:
符合单一职责原则
优秀的扩展性
灵活性非常高
缺点:
具体元素对访问者公布细节
具体元素变更比较困难
违背了依赖倒置原则
总结:
迭代器模式只能访问同类或者同接口的数据,而访问者模式对迭代器模式的扩充可以遍历不同的对象然后执行不同的操作,针对访问对象的不同,执行不同的操作
标签:
原文地址:http://blog.csdn.net/renpengddxx/article/details/52149256