访问者模式_访问数据结构并处理数据(访问者不同算法不同)
/**
* @author maikec
* @date 2019/5/14
*/
public abstract class AbstractItem {
@Getter
@Setter
protected String name;
/**
* 接受访问者
* @param visitor
*/
public abstract void accept(AbstractVisitor visitor);
}
/**
* @author maikec
* @date 2019/5/14
*/
public abstract class AbstractVisitor {
/**
* 访问item
* @param item
*/
public abstract void visit(AbstractItem item);
}
/**
* @author maikec
* @date 2019/5/14
*/
public class Engine extends AbstractItem {
public Engine(){}
public Engine(String name){
this.name = name;
}
@Override
public void accept(AbstractVisitor visitor) {
visitor.visit( this );
}
}
/**
* @author maikec
* @date 2019/5/14
*/
public class Wheel extends AbstractItem {
public Wheel(){}
public Wheel(String name){
this.name = name;
}
@Override
public void accept(AbstractVisitor visitor) {
visitor.visit( this );
}
}
/**
* @author maikec
* @date 2019/5/14
*/
public class PrintVisitor extends AbstractVisitor {
@Override
public void visit(AbstractItem item) {
System.out.println( "访问:"+item.getName() );
}
}
/**
* @author maikec
* @date 2019/5/14
*/
public class VisitorDemo {
public static void main(String[] args) {
AbstractItem engine = new Engine( "Engine" );
AbstractItem wheel = new Wheel( "Wheel" );
PrintVisitor printVisitor = new PrintVisitor();
printVisitor.visit( engine );
System.out.println( "====" );
printVisitor.visit( wheel );
}
}
复制代码
附录
github.com/maikec/patt… 个人GitHub设计模式案例
声明
引用该文档请注明出处