访问者模式
应用场景
一些对象构造绝对固定。但常常须要对该对象进行定制化操作。这个时候咱们能够用到拜访模式。
- 那些构造固定的对象称为被受访者,它承受访问者的拜访,并将本人做为参数,传递给访问者
- 应用固定对象进行相干操作的类被称为访问者,它在上述调用后,取得了受访者对象的援用,因此能够对其进行操作
优缺点
- 长处:将变动的拜访跟理论的对象构造切分开来
- 毛病:访问者和被访问者相互依赖
一个 demo
- 一个电脑有鼠标、键盘、显示器组成,这些组件都是受访者
- 访问者 ComputerPartDisplayVisitor 能够拜访这些局部
受访者的对立形象接口
public interface ComputerPart {public void accept(ComputerPartVisitor computerPartVisitor);
}
一个具体的受访者实现:电脑的键盘局部
public class Keyboard implements ComputerPart {
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {computerPartVisitor.visit(this);
}
}
一个具体的受访者实现:电脑的显示器局部
public class Monitor implements ComputerPart {
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {computerPartVisitor.visit(this);
}
}
定义访问者的能拜访哪些电脑部件接口:
public interface ComputerPartVisitor {public void visit(Keyboard keyboard);
public void visit(Monitor monitor);
}
基于上述接口定义具体的拜访行为:
public class ComputerPartDisplayVisitor implements ComputerPartVisitor {
@Override
public void visit(Keyboard keyboard) {System.out.println("Displaying Keyboard.");
}
@Override
public void visit(Monitor monitor) {System.out.println("Displaying Monitor.");
}
}
将具体某个电脑部件,交给访问者拜访
public class VisitorPatternDemo {public static void main(String[] args) {
// 将键盘局部交给访问者拜访
ComputerPart computer = new Keyboard();
computer.accept(new ComputerPartDisplayVisitor());
}
}
另外一个 demo
在 JSqlParser 中源码中,一个 SQL 由多局部组成,比方 where 条件局部、排序局部。这些局部的个性化拜访,也应用了访问者模式
参考资料
https://www.runoob.com/design…
欢送关注我的集体公众号 ” 东南偏北 UP”,记录代码人生,行业思考,科技评论