11、访问者

文章目录


demo

/**
 * 不改变数据结构的前提下定义作用于这些元素的新的操作;
 * 访问者模式是对迭代器模式的扩充, 可以遍历不同的对象, 然后执行不同的操作;
 * 适用于数据结构相对稳定的系统;
 * 角色:抽象访问者(Visitor);具体访问者;抽象元素;具体元素;结构对象;
 * 编译器抽象语法树
 */
public class Visitor {
    public static void main(String[] args) {
        ObjectStructure objectStructure = new ObjectStructure();
        objectStructure.acccept(new ConcreteVisitor());
    }
}

abstract class Element{
    public abstract void work();
    public abstract void accept(AbstractVisitor visitor);
}

class ElementA extends Element{

    @Override
    public void work() {
        System.out.println("A ele work");
    }

    @Override
    public void accept(AbstractVisitor visitor) {
        visitor.visit(this);
    }
}

class ElementB extends Element{

    @Override
    public void work() {
        System.out.println("B ele work");
    }

    @Override
    public void accept(AbstractVisitor visitor) {
        visitor.visit(this);
    }
}
abstract class AbstractVisitor{
    public abstract void visit(ElementA elementA);
    public abstract void visit(ElementB elementB);
}

class ConcreteVisitor extends  AbstractVisitor{

    @Override
    public void visit(ElementA elementA) {
        System.out.println("visit A");
        elementA.work();
    }

    @Override
    public void visit(ElementB elementB) {
        elementB.work();
    }
}

class ObjectStructure {
    ElementA elementA = new ElementA();
    ElementB elementB = new ElementB();

    public void acccept(AbstractVisitor v) {
        this.elementA.accept(v);
        this.elementB.accept(v);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值