java访问者模式
2015-08-31 22:18
441 查看
访问者
当你想要为一个对象的组合增加新的能力,且封装并不重要时,就使用访问者模式。
UML图
![](http://img.blog.csdn.net/20150831221419974?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
例
优点
1.允许你对组合结构加入新的操作,而无需改变结构本身
2. 想要加入新的操作,相对容易
3. 访问者所进行的操作,其代码是集中在一起的。
缺点
1.当采用访问者模式的时候,就会打破组合类的封装
2.因为游走的功能牵涉其中,所以对组合结构的改变就更加困难
当你想要为一个对象的组合增加新的能力,且封装并不重要时,就使用访问者模式。
UML图
例
interface Visitor { void visit(Wheel wheel); void visit(Engine engine); void visit(Body body); void visit(Car car); } class Wheel { private String name; Wheel(String name) { this.name = name; } String getName() { return this.name; } void accept(Visitor visitor) { visitor.visit(this); } } class Engine { void accept(Visitor visitor) { visitor.visit(this); } } class Body { void accept(Visitor visitor) { visitor.visit(this); } } class Car { private Engine engine = new Engine(); private Body body = new Body(); private Wheel[] wheels = { new Wheel("front left"), new Wheel("front right"), new Wheel("back left") , new Wheel("back right") }; void accept(Visitor visitor) { visitor.visit(this); engine.accept(visitor); body.accept(visitor); for (int i = 0; i < wheels.length; ++ i) wheels[i].accept(visitor); } } class PrintVisitor implements Visitor { public void visit(Wheel wheel) { System.out.println("Visiting " + wheel.getName() + " wheel"); } public void visit(Engine engine) { System.out.println("Visiting engine"); } public void visit(Body body) { System.out.println("Visiting body"); } public void visit(Car car) { System.out.println("Visiting car"); } } public class VisitorDemo { static public void main(String[] args) { Car car = new Car(); Visitor visitor = new PrintVisitor(); car.accept(visitor); } }
优点
1.允许你对组合结构加入新的操作,而无需改变结构本身
2. 想要加入新的操作,相对容易
3. 访问者所进行的操作,其代码是集中在一起的。
缺点
1.当采用访问者模式的时候,就会打破组合类的封装
2.因为游走的功能牵涉其中,所以对组合结构的改变就更加困难
相关文章推荐
- RandomAccessFile的用法
- 切换java-javac jdk1.7-jdk1.6
- JAVA中重写和重载的区别
- 001Spring4.2基本环境搭建
- java中的foreach循环
- 本人是一名专科学生,现自学java,记录学习。希望能够大家多多提提意见
- java反射机制之基础
- DesignPattern_Java:Composite Pattern
- spring 的 resource接口概览
- java中Map,List与Set的区别(二)
- spring3.0新特性
- 用java实现冒泡排序法
- 【Java】JAVA枚举类型
- Java连接SQLite数据库
- Java 多线程 并发编程
- Java智力题
- java的匿名内部类
- 【Java】JAVA反射机制
- 【JavaSE】day10_对象流
- Eclipse 修改编码方式