前言:服访问者模式解决稳定的数据结构和易变的操作耦合问题。比如下面例子:鼠标,显示器,键盘,电脑它们的关系就是稳定的,所以鼠标,显示器,键盘,电脑实体类组成的结构就是稳定的数据结构。访问方式是多变的,所以可以在访问的时候根据具体需求去访问。
JAVA语言版访问者模式
创建电脑接口:
public interface ComputerPart {
void accept(ComputerPartVisitor computerPartVisitor);
}
创建访问者接口:
public interface ComputerPartVisitor {
void visitor(Computer computer);
void visitor(Mouse mouse);
void visitor(Keyboard keyboard);
void visitor(Monitor monitor);
}
创建实现电脑接口的实现类:
public class Mouse implements ComputerPart{
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visitor(this);
}
}
public class Monitor implements ComputerPart{
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visitor(this);
}
}
public class Computer implements ComputerPart{
ComputerPart computerParts[];
public Computer() {
computerParts = new ComputerPart[]{new Keyboard(), new Monitor(), new Mouse()};
}
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
for (ComputerPart computerPart:computerParts){
computerPart.accept(computerPartVisitor);
}
computerPartVisitor.visitor(this);
}
}
创建访问者实现类
public class ComputerPartDisplayVisitor implements ComputerPartVisitor{
@Override
public void visitor(Computer computer) {
System.out.println("显示电脑");
}
@Override
public void visitor(Mouse mouse) {
System.out.println("显示鼠标");
}
@Override
public void visitor(Keyboard keyboard) {
System.out.println("显示键盘");
}
@Override
public void visitor(Monitor monitor) {
System.out.println("显示显示器");
}
}
使用 ComputerPartDisplayVisitor 来显示 Computer 的组成部分。
public class VisitorPatterDemo {
public static void main(String[] args) {
Computer computer =new Computer();
ComputerPartVisitor computerPartVisitor = new ComputerPartDisplayVisitor();
System.out.println("访问电脑:");
computer.accept(computerPartVisitor);
System.out.println("");
System.out.println("访问键盘:");
Keyboard keyboard =new Keyboard();
keyboard.accept(computerPartVisitor);
}
}
输出结果:
访问电脑:
显示键盘
显示显示器
显示鼠标
显示电脑
访问键盘:
显示键盘