您的位置:首页 > 其它

行为模式:访问者模式(visitor)解析例子

2011-07-11 19:23 204 查看
[align=left]摘要:本文深入浅出的讲述了设计模式中的模式属于行为型模式,其意图是表示一个作用于某对象结构中的各元素的操作。他使你可以在不改变个元素的类的前提下定义作用与这些元素的操作。考虑一个访问汽车各个部件的程序,该程序需要在汽车各个部件上执行某些操作,比如:获取名字等等,因此它可能需要定义许多操作已进行类型检查。这些操作大多要求对不同节点进行不同的处理,如果单纯使用 类,并在便利抽象语法树时将此对象传递给当前访问的元素。当一个元素接受该访问者时,该元素向访问者发送一个包含自身类信息的请求,该请求同时也将该元素本身作为一个参数,然后访问者将为该原色执行该操作,这一个操作以前是在该元素的类中的。使用Visitor适用性:[/align][align=left]l需要对一个对象结构中的对象进行很多不同的并且不相关的操作。而你想避免让这些操作污染这些对象的类,Visitor模式让每个应用仅仅包含需要用到的操作。[/align][align=left]l为该对象结构中的ConcreteElement操作,该操作的名字和特征标示了发送Visit ConcreteVisitor:声明的操作,每个操作实现本算法的一部分,而该算法片断乃是对应于结构中对象的类。ConcreteVisitor Element:操作,该操作以一个访问者为参数。[/align][align=left]l visitor; [/align][align=left] [/align][align=left]packagepublic Visitor{void [/align][align=left] visit(Body body);void}[/align][align=left][/align][align=left][/align][align=left]class Visitor{protected;public name }public visit(Wheel wheel){out+wheel.getName()+[/align][align=left] void System."Check Engine!" }public visit(Body body){out);[/align][align=left] [/align][align=left].println(" Check Car!" }具体的被访问者: visitor; implements void v.visit([/align][align=left]} visitor; implements engine Engine();private = [/align][align=left] Wheel[] new),"Front right" Wheel(new)};public accept(Visitor v){this [/align][align=left].accept(v);for i=0;i<4;i++)wheels }总结:访问者模式充分利用了面向对象语言中的多态模式。把同类对象的访问统一到一个类中,使得改变访问方式变得容易,增加一个被访问者的类也比较容易。[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: