java 访客模式_设计模式访客模式

访客模式属于行为设计模式,通过访客类改变元素类的执行算法。在这个例子中,我们创建了ComputerPart接口和键盘、鼠标、显示器等具体实现,以及ComputerPartVisitor接口和ComputerPartDisplayVisitor具体访客类。访客模式使得对元素的操作可以在不修改原有元素类的情况下进行扩展。
摘要由CSDN通过智能技术生成

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值