行为型模式-----访问者模式(Visitor)

1、访问者模式     

             该模式就是一种分离对象数据结构与行为的方法,通过这种分离,可达到为一个被访问者动态添加新的操作而无需做其他的修改的效果。

             该模式的优点是:增加操作很容易,因为增加操作意味着增加新的访问者。访问者模式将有关行为集中到一个访问者对象中,其改变不形象系统数据结构,

                         其缺点是:增加新的数据结果很困难。

 

         涉及角色:

                  1、Visitor抽象访问者角色,该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色Element,这样访问者就可以通过该元素角色的

                                  特定接口直接访问它。

                  2、ConcreteVisitor:具体访问者角色,实现Visitor接口。

                  3、Element定义一个接受访问操作accept(Visitor visitor)。

                  4、ConcreteElement:具体元素对象。

                   5、ObjectStructure:结构对象角色,这是使用访问者模式必备的角色。他具备以下特性:能枚举他的元素;可以提供一个高层次的接口以

                               允许访问他的元素,如有需要,可以设计成一个复合对象或者一个聚集。

 

   

 

    实例一:

      

public interface Visitor {

	public void visit(Element element);

}

public class ConcreteVisitorA implements Visitor {

	@Override
	public void visit(final Element element) {
		System.out.println("  element  : " + element);
	}
}

public interface Element {

	public void accept(Visitor visitor);

}

public class ConcreteElementA implements Element {

	@Override
	public void accept(final Visitor visitor) {
		visitor.visit(this);
	}
}

public class ObjectStruct {

	private List<Element> list = new ArrayList<Element>();

	public void addE(final Element ele) {
		this.list.add(ele);
	}

	public void removeE(final Element ele) {
		this.list.add(ele);
	}

	public void objectAccept(final Visitor visitor) {
		for (final Element ele : this.list) {
			ele.accept(visitor);
		}
	}
}

  

      模拟调用:

  

	public static void main(final String[] args) {
		final ObjectStruct os = new ObjectStruct();
		os.addE(new ConcreteElementA());
		os.addE(new ConcreteElementA());

		final Visitor v = new ConcreteVisitorA();
		os.objectAccept(v);
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值