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

java设计模式25_访问者模式

2017-06-08 09:18 483 查看

访问者模式

在访问者模式中,使用访问者类来改变元素类的执行算法。 通过这种方式,元素的执行算法可以随访问者变化而变化。 此模式属于行为模式类别。 根据每个模式,元素对象必须接受访问者对象,以便访问者对象处理对元素对象的操作

实现

这个实现的示例中,将创建一个叫作ComputerPart的接口,并定义接受操作。Keyboard, Mouse, Monitor 和 Computer 是实现ComputerPart接口的具体类。还将定义另一个接口ComputerPartVisitor,它将定义一个访问类操作。 Computer 使用具体的访客做相应的动作。将使用Computer和ComputerPartVisitor类来演示访问者模式的使用。

代码

package com.test;

//第1步,定义一个接口来表示元素
interface ComputerPart {
public void accept(ComputerPartVisitor computerPartVisitor);
}

// 第2步, 创建扩展上述类的具体类
class Keyboard implements ComputerPart {

@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}

class Monitor implements ComputerPart {

@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}

class Mouse implements ComputerPart {

@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}

class Computer implements ComputerPart {

ComputerPart[] parts;

public Computer() {
parts = new ComputerPart[] { new Mouse(), new Keyboard(), new Monitor() };
}

@Override
public void accept(ComputerPartVisitor computerPartVisitor)
4000
{
for (int i = 0; i < parts.length; i++) {
parts[i].accept(computerPartVisitor);
}
computerPartVisitor.visit(this);
}
}

// 第3步,定义一个接口来代表访问者
interface ComputerPartVisitor {
public void visit(Computer computer);

public void visit(Mouse mouse);

public void visit(Keyboard keyboard);

public void visit(Monitor monitor);
}

// 第4步,创建实现上述类的具体访问者
class ComputerPartDisplayVisitor implements ComputerPartVisitor {

@Override
public void visit(Computer computer) {
System.out.println("Displaying Computer.");
}

@Override
public void visit(Mouse mouse) {
System.out.println("Displaying Mouse.");
}

@Override
public void visit(Keyboard keyboard) {
System.out.println("Displaying Keyboard.");
}

@Override
public void visit(Monitor monitor) {
System.out.println("Displaying Monitor.");
}
}

// 第5 步,使用ComputerPartDisplayVisitor显示计算机的部件
public class Test {

public static void main(String[] args) {
ComputerPart computer = new Computer();
computer.accept(new ComputerPartDisplayVisitor());
}

}


运行结果:

Displaying Mouse.
Displaying Keyboard.
Displaying Monitor.
Displaying Computer.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: