文档章节

访问者模式(Visitor)

Carbenson
 Carbenson
发布于 2015/09/14 09:51
字数 515
阅读 26
收藏 1

访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。访问者模式适用于数据结构相对稳定算法又易变化的系统。因为访问者模式使得算法操作增加变得容易。若系统数据结构对象易于变化,经常有新的数据对象增加进来,则不适合使用访问者模式。访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者。访问者模式将有关行为集中到一个访问者对象中,其改变不影响系统数据结构。其缺点就是增加新的数据结构很困难。—— From 百科

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

public interface Visitor {
	public void visit(Subject sub);
}
public interface Subject {

	String getSubject();
	public void accept(Visitor visitor);  
}

两个实现类 ,Subject类,accept方法,接受将要访问它的对象,getSubject()获取将要被访问的属性,

public class  MyVisitor implements Visitor {

	@Override
	public void visit(Subject sub) {
		System.out.println("visit the subject:"+sub.getSubject()); 
	}
	
}
public class MySubject implements Subject{

	@Override
	public String getSubject() {
		
		return "love";
	}

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

}

测试:

public class Test {
	public static void main(String[] args) {
		Visitor visitor = new MyVisitor();
		Subject sub = new MySubject();
		sub.accept(visitor);
	}
}

输出:visit the subject:love

该模式适用场景:如果我们想为一个现有的类增加新功能,不得不考虑几个事情:1、新功能会不会与现有功能出现兼容性问题?2、以后会不会再需要添加?3、如果类不允许修改代码怎么办?面对这些问题,最好的解决方法就是使用访问者模式,访问者模式适用于数据结构相对稳定的系统,把数据结构和算法解耦,


本文转载自:http://blog.csdn.net/zhangerqing/article/details/8245537

共有 人打赏支持
Carbenson
粉丝 16
博文 260
码字总数 81948
作品 0
广州
程序员
私信 提问
设计模式--访问者模式

访问者模式(visitor): 访问者模式应用的场景: 访问者模式的优点: 访问者模式的缺点: 简单概括访问者模式: 示例: 访问者模式测试类VisitorTest.java 主题接口类Subject.java 访问接口类Vis...

有钱有爱
2016/04/09
12
0
设计模式 ( 二十一 ):Vistor访问者模式 -- 行为型

1.概述 在软件开发过程中,对于系统中的某些对象,它们存储在同一个集合collection中,且具有不同的类型,而且对于该集合中的对象,可以接受一类称为访问者的对象来访问,而且不同的访问者其...

文艺小青年
2017/05/11
0
0
访问者模式(Visitor)解决方案

25.2 解决方案 25.2.1 访问者模式来解决 用来解决上述问题的一个合理的解决方案,就是使用访问者模式。那么什么是访问者模式呢? (1)访问者模式定义 (2)应用访问者模式来解决的思路 仔细...

ok私塾
2014/01/09
131
0
折腾Java设计模式之访问者模式

博客原文地址:折腾Java设计模式之访问者模式 访问者模式 Represent an operation to be performed on the elements of an object structure. Visitor lets a new operation be defined wit......

大萌小路
02/19
0
0
【白话设计模式二十四】访问者模式(Visitor)

白话设计模式 工厂模式 单例模式 【白话设计模式一】简单工厂模式(Simple Factory) 【白话设计模式二】外观模式(Facade) 【白话设计模式三】适配器模式(Adapter) 【白话设计模式四】单例模式...

陶邦仁
2016/04/18
312
0

没有更多内容

加载失败,请刷新页面

加载更多

js数组遍历和对象遍历

数组遍历 for for(var i=0,len=arr.length;i<len;i++){console.log(arr[i]);} forEach - ES5语法,性能比for弱,不能使用break终止循环,不能使用return arr.forEach(function(item,inde......

祖达
19分钟前
0
0
Java网络编程

基本概念 网络IO会涉及到同步,异步,阻塞,非阻塞等几个概念。 一个网络IO读取过程是数据从 网卡 到 内核缓冲区 到 用户内存 的过程。同步和异步区别在于数据从内核到用户内存的过程是否需要...

春哥大魔王的博客
41分钟前
2
0
Spring "reg:zookeeper" 的前缀 "reg" 未绑定等类似问题解决方案。

今天同事遇到一个Spring启动加载配置文件时,不识别reg:zookeeper标签的问题。 我查看配置,发现是Spring配置文件的头部没有引入reg标签的命名空间,具体如下图: 所以,以后遇到类似的标签未...

花漾年华
今天
2
0
阿里云领衔云市场

近期,2018年Q4及全年的全球云基础设施服务市场数据新鲜出炉,发布方是美国市场研究机构Synergy Research Group。这个机构是专做电信网络市场情报的公司,成立于1999年,每年都会公布各大公有...

linuxCool
今天
2
0
C++友元函数和友元类(C++ friend)详解

私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行。这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书...

shzwork
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部