您的位置:首页 > 编程语言 > Java开发

java访问者模式

2015-08-31 22:18 441 查看
访问者
当你想要为一个对象的组合增加新的能力,且封装并不重要时,就使用访问者模式。

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.因为游走的功能牵涉其中,所以对组合结构的改变就更加困难
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: