目录
- 目录
- 访问者模式
- 实际案例
- 定义
- 测试
- 实现方式
- UML & Code
- UML
- Code
- 系列导航
访问者模式
在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。
通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。
根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。
实际案例
类信息概览:
类名 | 说明 |
---|---|
Main.java | 方法的总入口 |
Mouse.java | 鼠标类 |
Computer.java | 电脑类 |
ComputerVisitorImpl.java | 电脑访问者实现类 |
KeyBoard.java | 键盘类 |
ComputerPartion.java | 电脑组件类 |
ComputerVisitor.java | 电脑访问者接口 |
定义
- Mouse.java
package com.ryo.design.pattern.note.visitor;/**** @author bbhou* @date 2017/8/18*/
public class Mouse implements ComputerPartion {
@Overridepublic void accept(ComputerVisitor computerVisitor) {computerVisitor.visit(this);}}
- Computer.java
package com.ryo.design.pattern.note.visitor;import java.util.Arrays;
import java.util.List;/*** 电脑* @author bbhou* @date 2017/8/18*/
public class Computer implements ComputerPartion {
private List<ComputerPartion> computerPartionList = Arrays.asList(new KeyBoard(), new Mouse());@Overridepublic void accept(ComputerVisitor computerVisitor) {for(ComputerPartion computerPartion : computerPartionList) {computerVisitor.visit(computerPartion);}}
}
- ComputerVisitorImpl.java
package com.ryo.design.pattern.note.visitor;/*** @author bbhou* @date 2017/8/18*/
public class ComputerVisitorImpl implements ComputerVisitor {
@Overridepublic void visit(ComputerPartion computerPartion) {String className = computerPartion.getClass().getSimpleName();System.out.println("visitor " + className);}}
- KeyBoard.java
package com.ryo.design.pattern.note.visitor;/**** @author bbhou* @date 2017/8/18*/
public class KeyBoard implements ComputerPartion {
@Overridepublic void accept(ComputerVisitor computerVisitor) {computerVisitor.visit(this);}
}
- ComputerPartion.java
package com.ryo.design.pattern.note.visitor;/*** 电脑部分* @author bbhou* @date 2017/8/18*/
public interface ComputerPartion {
/*** 接受电脑组件* @param computerVisitor 电脑组件*/void accept(ComputerVisitor computerVisitor);}
- ComputerVisitor.java
package com.ryo.design.pattern.note.visitor;/**** @author bbhou* @date 2017/8/18*/
public interface ComputerVisitor {
/*** 访问者* @param computerPartion 组件*/void visit(ComputerPartion computerPartion);}
测试
- Main.java
/** DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.* Copyright (c) 2012-2018. houbinbini Inc.* design-pattern All rights reserved.*/package com.ryo.design.pattern.note.visitor;/*** <p> </p>** <pre> Created: 2018/5/26 下午8:36 </pre>* <pre> Project: design-pattern </pre>** @author houbinbin* @version 1.0* @since JDK 1.7*/
public class Main {
public static void main(String[] args) {ComputerPartion computerPartion = new Computer();computerPartion.accept(new ComputerVisitorImpl());}}
- 测试结果
visitor KeyBoard
visitor Mouse
实现方式
UML & Code
UML
UML 图示如下
Code
代码地址
访问者模式
系列导航
系列导航