访问者模式

定义

封装一些作用于某种数据结构中的各元素,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作.

角色

  1. 抽象访问者

    抽象类或者接口,声明访问者可以访问哪些元素

  2. 具体访问者

    实现具体该干什么

  3. 抽象元素

    接口或者抽象类,声明接受哪一类访问者访问.

  4. 具体元素

    实现具体方法

  5. 结构对象

    元素产生者,一般容纳在容器中.

优点

  1. 符合单一职责原则
  2. 优秀的扩展性
  3. 灵活性非常高

缺点

  1. 具体元素对访问者公布细节
  2. 具体元素变更比较困难
  3. 违背了依赖倒置原则

通用代码

抽象元素

public abstract class Element {

    abstract void doSomething();

    abstract void accept(IVisitor IVisitor);
}

具体元素

public class ConcreteElement1 extends Element {
    @Override
    void doSomething() {

    }

    @Override
    void accept(IVisitor IVisitor) {
        IVisitor.visit(this);
    }
}
public class ConcreteElement2 extends Element {
    @Override
    void doSomething() {

    }

    @Override
    void accept(IVisitor IVisitor) {
        IVisitor.visit(this);
    }
}

抽象访问者

public interface IVisitor {
    void visit(ConcreteElement1 concreteElement1);

    void visit(ConcreteElement2 concreteElement2);
}

具体访问者

public class Visitor implements IVisitor {
    @Override
    public void visit(ConcreteElement1 concreteElement1) {
        concreteElement1.doSomething();
    }

    @Override
    public void visit(ConcreteElement2 concreteElement2) {
        concreteElement2.doSomething();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值