In Visitor pattern, we use a visitor class which changes the executing algorithm of an element class. By this way, execution algorithm of element can vary as and when visitor varies. This pattern comes under behavior pattern category. As per the pattern, element object has to accept the visitor object so that visitor object handles the operation on the element object.

Implementation

We are going to create a ComputerPart interface defining accept opearation.Keyboard, Mouse, Monitor and Computer are concrete classes implementing ComputerPart interface. We will define another interface ComputerPartVisitor which will define a visitor class operations. Computer uses concrete visitor to do corresponding action.

VisitorPatternDemo, our demo class, will use Computer and ComputerPartVisitor classes to demonstrate use of visitor pattern.

ea29968208226149653117c92954e16c.png

Step 1

Define an interface to represent element.

ComputerPart.java

publicinterfaceComputerPart{publicvoidaccept(ComputerPartVisitorcomputerPartVisitor);}

Step 2

Create concrete classes extending the above class.

Keyboard.java

publicclassKeyboardimplementsComputerPart{@Overridepublicvoidaccept(ComputerPartVisitorcomputerPartVisitor){computerPartVisitor.visit(this);}}

Monitor.java

publicclassMonitorimplementsComputerPart{@Overridepublicvoidaccept(ComputerPartVisitorcomputerPartVisitor){computerPartVisitor.visit(this);}}

Mouse.java

publicclassMouseimplementsComputerPart{@Overridepublicvoidaccept(ComputerPartVisitorcomputerPartVisitor){computerPartVisitor.visit(this);}}

Computer.java

publicclassComputerimplementsComputerPart{ComputerPart[]parts;publicComputer(){parts=newComputerPart[]{newMouse(),newKeyboard(),newMonitor()};}@Overridepublicvoidaccept(ComputerPartVisitorcomputerPartVisitor){for(inti=0;i

步骤3

定义一个界面来代表访客。

ComputerPartVisitor.java

publicinterfaceComputerPartVisitor{publicvoidvisit(Computercomputer);publicvoidvisit(Mousemouse);publicvoidvisit(Keyboardkeyboard);publicvoidvisit(Monitormonitor);}

步骤4

创建具体的访问者实现上述类。

ComputerPartDisplayVisitor.java

publicclassComputerPartDisplayVisitorimplementsComputerPartVisitor{@Overridepublicvoidvisit(Computercomputer){System.out.println("Displaying Computer.");}@Overridepublicvoidvisit(Mousemouse){System.out.println("Displaying Mouse.");}@Overridepublicvoidvisit(Keyboardkeyboard){System.out.println("Displaying Keyboard.");}@Overridepublicvoidvisit(Monitormonitor){System.out.println("Displaying Monitor.");}}

步骤5

使用ComputerPartDisplayVisitor显示计算机的部分。

VisitorPatternDemo.java

publicclassVisitorPatternDemo{publicstaticvoidmain(String[]args){ComputerPartcomputer=newComputer();computer.accept(newComputerPartDisplayVisitor());}}

步骤6

验证输出。

Displaying Mouse.

Displaying Keyboard.

Displaying Monitor.

Displaying Computer.

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐