设计模式——访问者模式

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

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

声明

引用该文档请注明出处

转载于:https://juejin.im/post/5ce8ebd1e51d455070226f18

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值