码迷,mamicode.com
首页 > 其他好文 > 详细

访问者模式

时间:2016-08-08 11:05:22      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:

定义:封装一些作用于某种数据结构中的各元素的操作,他可以在不改变数据结构的前提下定义作用于这些元素的新的操作

类图:

技术分享


代码:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!