访问者模式
内容参考 w3cschool
分类:行为型设计模式
应用:
目录
UML类图
创建电脑元件接口以及 访问者的接口
ComputerPart
public interface ComputerPart {
/**
* 接受
* @param computerPartVisitor 电脑元件访问者
*/
void accept(ComputerPartVisitor computerPartVisitor);
}
ComputerPartVisitor
public interface ComputerPartVisitor {
/**
* 访问电脑
* @param computer 电脑对象
*/
void visit(Computer computer);
/**
* 访问鼠标
* @param mouse 鼠标
*/
void visit(Mouse mouse);
/**
* 访问显示器
* @param monitor 显示器对象
*/
void visit(Monitor monitor);
/**
* 访问键盘
* @param keyBoard 键盘
*/
void visit(KeyBoard keyBoard);
}
创建电脑元件
KeyBoard
public class KeyBoard implements ComputerPart{
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
Mouse
public class Mouse implements ComputerPart{
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
Monitor
public class Monitor implements ComputerPart{
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
Computer
public class Computer implements ComputerPart{
ComputerPart[] parts;
public Computer() {
parts = new ComputerPart[]{new Mouse(),new KeyBoard(),new Monitor()};
}
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
for (int i =0;i<parts.length;i++){
parts[i].accept(computerPartVisitor);
}
computerPartVisitor.visit(this);
}
}
电脑元件访问实体类
ComputerPartDisplayVisitor
public class ComputerPartDisplayVisitor implements ComputerPartVisitor{
@Override
public void visit(Computer computer) {
System.out.println("[Computer] Display");
}
@Override
public void visit(Mouse mouse) {
System.out.println("[Mouse] Display");
}
@Override
public void visit(Monitor monitor) {
System.out.println("[Monitor] Display");
}
@Override
public void visit(KeyBoard keyBoard) {
System.out.println("[KeyBoard] Display");
}
}
运行测试
public class ExecuteMain {
public static void main(String[] args) {
ComputerPart computerPart = new Computer();
computerPart.accept(new ComputerPartDisplayVisitor());
}
}
[Mouse] Display
[KeyBoard] Display
[Monitor] Display
[Computer] Display
Process finished with exit code 0