訪問者模式

定義

封裝一些作用於某種數據結構中的各元素,它可以在不改變數據結構的前提下定義作用於這些元素的新的操作.

角色

  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();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章