关于java:访问者模式学习笔记

访问者模式

应用场景

一些对象构造绝对固定。但常常须要对该对象进行定制化操作。这个时候咱们能够用到拜访模式。

  • 那些构造固定的对象称为被受访者,它承受访问者的拜访,并将本人做为参数,传递给访问者
  • 应用固定对象进行相干操作的类被称为访问者,它在上述调用后,取得了受访者对象的援用,因此能够对其进行操作

优缺点

  • 长处:将变动的拜访跟理论的对象构造切分开来
  • 毛病:访问者和被访问者相互依赖

一个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”,记录代码人生,行业思考,科技评论

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理