设计模式——访问者模式

144 阅读1分钟

最新修改已更新到github

访问者模式_访问数据结构并处理数据(访问者不同算法不同)

/**
 * @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设计模式案例

声明

引用该文档请注明出处