Java设计模式系列之访问者模式
2015-10-30 13:23
260 查看
访问者模式,顾名思义使用了这个模式后就可以在不修改已有程序结构的前提下,通过添加额外的“访问者”来完成对已有代码功能的提升。
《设计模式》一书对于访问者模式给出的定义为:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的 新操作。从定义可以看出结构对象是使用访问者模式必须条件,而且这个结构对象必须存在遍历自身各个对象的方法。这便类似于java中的 collection概念了。
以下是访问者模式的组成结构:
1) 访问者角色(Visitor):为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色。这样访问者就可以通过该元素角色的特定接口直接访问它。
2) 具体访问者角色(Concrete Visitor):实现每个由访问者角色(Visitor)声明的操作。
3) 元素角色(Element):定义一个Accept操作,它以一个访问者为参数。
4) 具体元素角色(Concrete Element):实现由元素角色提供的Accept操作。
5) 对象结构角色(Object Structure):这是使用访问者模式必备的角色。它要具备以下特征:能枚举它的元素;可以提供一个高层的接口以允许该访问者访问它的元素;可以是一个复合(组合模式)或是一个集合,如一个列表或一个无序集合。
来张类图就能更加清晰的看清访问者模式的结构了。
那么像引言中假想的。我们应该做些什么才能让访问者模式跑起来呢?首先我们要在原有的类层次结构中添加accept方法。然后将这个类层次中的类放到一个对象结构中去。这样再去创建访问者角色……
三、举例
?
访问者接口与实现类,分别代表男人与女人在不同的状态下的表现
?
ObjectStructure与客户端测试代码
?
既定访问者模式的类图:
《设计模式》一书对于访问者模式给出的定义为:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的 新操作。从定义可以看出结构对象是使用访问者模式必须条件,而且这个结构对象必须存在遍历自身各个对象的方法。这便类似于java中的 collection概念了。
以下是访问者模式的组成结构:
1) 访问者角色(Visitor):为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色。这样访问者就可以通过该元素角色的特定接口直接访问它。
2) 具体访问者角色(Concrete Visitor):实现每个由访问者角色(Visitor)声明的操作。
3) 元素角色(Element):定义一个Accept操作,它以一个访问者为参数。
4) 具体元素角色(Concrete Element):实现由元素角色提供的Accept操作。
5) 对象结构角色(Object Structure):这是使用访问者模式必备的角色。它要具备以下特征:能枚举它的元素;可以提供一个高层的接口以允许该访问者访问它的元素;可以是一个复合(组合模式)或是一个集合,如一个列表或一个无序集合。
来张类图就能更加清晰的看清访问者模式的结构了。
那么像引言中假想的。我们应该做些什么才能让访问者模式跑起来呢?首先我们要在原有的类层次结构中添加accept方法。然后将这个类层次中的类放到一个对象结构中去。这样再去创建访问者角色……
三、举例
?
?
?
相关文章推荐
- Java设计模式系列之策略模式
- Java设计模式系列之解释器模式
- Java基础知识系列之-抽象abstract
- Struts2源码阅读系列之Struts2工作原理
- Struts2源码阅读系列-序
- Struts2源码阅读系列之Struts2简单例子
- Struts2 中的action与页面数据传输
- 【JAVA的三大循环】(1)
- Java获取时间并将时间格式化输出以为文件名
- eclipse如何关联源码
- Java根据两点的经纬度来计算之间的距离
- 新浪微博模拟登录(Java)
- 通俗易懂SpringMVC整体框架理解
- JAVA RMI远程方法调用简单实例
- Java JNI 简单介绍 HelloWorld
- eclipse导入html、js、xml报错的问题
- SpringMVC 400 Bad Request 问题
- Java synchronized同步 各方式略解
- java中的多线程
- Java 单例模式 SingletTon