设计模式(23)------访问者模式
来源:互联网 发布:手机绿色上网软件 编辑:程序博客网 时间:2024/06/08 17:27
访问者模式作用:
表示作用于某个对象结构中的各个元素的操作,
使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
应用场景:
(1)一个对象结构包含很多类对象,它们有不同的接口,但是想对这些对象实施一些依赖于其具体类的操作。
(2)需要对一个对象中的对象进行许多不相关的操作,但是,我们想避免这些操作耦合这些对象。
(3)定义对象结构的类很少改变,但是经常需要在这个对象上定义新的操作。
参与对象:
(1)Visitor
为该对象结构中的ConcreteElement的每一个类声明一个visit操作。
该操作的名字和特征标识类发送visit请求给该访问者的哪个类。
这使得访问者可以确认正被访问元素的具体的类。
这样访问者可以通过该元素的特定接口直接访问它。
(2)ConcreteVisitor
实现每个Visitor操作声明的接口。
(3)Element
定义一个Accept操作,它以一个访问者为参数。
(4)ConcreteElement
实现Accept操作,该操作以一个访问者为参数。
(5)ObjectStructure
提供一个高层接口,允许访问者访问他们。
eg:
Visitor
package com.lanhuigu.base.design.behavior.visitor;/** * Visitor: 为该对象结构中的ConcreteElement的每一个类声明一个visit操作。 */public interface Visitor {public void visitString(StringElement strE);public void visitFloat(FloatElement floatE);}
ConcreteVisitor
package com.lanhuigu.base.design.behavior.visitor;/** * Concretevisitor: 实现每个Visitor操作声明的接口 */public class ConcreteVisitor implements Visitor {@Overridepublic void visitString(StringElement strE) {// TODO Auto-generated method stubSystem.out.println(strE.getSe());}@Overridepublic void visitFloat(FloatElement floatE) {// TODO Auto-generated method stubSystem.out.println(floatE.getFe());}}
Element
package com.lanhuigu.base.design.behavior.visitor;/** * Element: 定义一个Accept操作,它以一个访问者为参数。 */public interface Visitable {public void accept(Visitor visitor);}
ConcreteElement
package com.lanhuigu.base.design.behavior.visitor;/** * ConcreteElement: 实现Accept操作,该操作以一个访问者为参数。 */public class StringElement implements Visitable {private String se;public StringElement(String se) {// TODO Auto-generated constructor stubthis.se = se;}public String getSe() {return se;}public void setSe(String se) {this.se = se;}@Overridepublic void accept(Visitor visitor) {// TODO Auto-generated method stubvisitor.visitString(this);}}
package com.lanhuigu.base.design.behavior.visitor;/** * ConcreteElement: 实现Accept操作,该操作以一个访问者为参数。 */public class FloatElement implements Visitable {private Float fe;public FloatElement(Float fe) {// TODO Auto-generated constructor stubthis.fe = fe;}public Float getFe() {return fe;}public void setFe(Float fe) {this.fe = fe;}@Overridepublic void accept(Visitor visitor) {// TODO Auto-generated method stubvisitor.visitFloat(this);}}
Client
package com.lanhuigu.base.design.behavior.visitor;public class Test {public static void main(String[] args) {Visitor visitor = new ConcreteVisitor();StringElement stringElement = new StringElement("strtest");stringElement.accept(visitor);FloatElement floatElement = new FloatElement(new Float(1.5));floatElement.accept(visitor);}}
运行结果:
0 0
- 设计模式(23)------访问者模式
- 设计模式(23)-访问者模式
- 设计模式(23)--访问者模式
- 设计模式 访问者模式
- 设计模式 - 访问者模式
- 设计模式:访问者模式
- 设计模式 - 访问者模式
- 设计模式 - 访问者模式
- 设计模式------------访问者模式
- 设计模式:访问者模式
- 设计模式--访问者模式
- 设计模式--访问者模式
- 设计模式-访问者模式
- 设计模式--访问者模式
- 设计模式-访问者模式
- 设计模式-访问者模式
- [设计模式]访问者模式
- 设计模式 - 访问者模式
- hdu 5540/Secrete Master Plan
- 1134: 整数去位 贪心
- 设计模式(22)------模板方法模式
- 集合_java集合框架
- 实现View 滑动的几种方法
- 设计模式(23)------访问者模式
- Python学习总结(5)-模块和包
- 最小花费(C#)
- Linux相关(Yum源搭建--基于FTP)
- 手把手教你炫酷慕课网视频启动导航的完美实现
- String StringBuilder StringBuffer
- 有关iOS构建版本上传应用
- 百度员工离职总结:如何做个好员工?(严重推荐)
- UML——画图前的准备