访问者模式

Posted camcay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了访问者模式相关的知识,希望对你有一定的参考价值。

把数据结构和数据操作分离

类图

技术图片

(图:wiki)

示例

public interface ComputerPart {
    void accept(Visitor computerVisitor);
}

public class KeyBoard implements ComputerPart {
    @Override
    public void accept(Visitor computerVisitor) {
        computerVisitor.visit(this);
    }
}

public class Mouse implements ComputerPart {
    @Override
    public void accept(Visitor computerVisitor) {
        computerVisitor.visit(this);
    }
}

public class Computer implements ComputerPart {
    private KeyBoard keyBoard= new KeyBoard();
    private Mouse mouse = new Mouse();
    @Override
    public void accept(Visitor computerVisitor) {
        computerVisitor.visit(this);
        keyBoard.accept(computerVisitor);
        mouse.accept(computerVisitor);
    }
}

public interface Visitor {
    void visit(Computer computer);
    void visit(Mouse mouse);
    void visit(KeyBoard keyBoard);
}

public class ConcreteVisitor implements Visitor {
    @Override
    public void visit(Computer computer) {
        System.out.println("访问电脑:"+computer);
    }

    @Override
    public void visit(Mouse mouse) {
        System.out.println("访问鼠标:"+mouse);
    }

    @Override
    public void visit(KeyBoard keyBoard) {
        System.out.println("访问键盘:"+keyBoard);
    }
}

//测试
public class Client {
    public static void main(String[] args){
        Computer computer = new Computer();
        Visitor visitor = new ConcreteVisitor();
        computer.accept(visitor);
    }
}

运行结果

技术图片

  • 可以在访问时对组合结构加入新操作,而无需修改结构本身。
  • 会打破组合类的封装
  • 组合结构本身的改变会变得困难

 

以上是关于访问者模式的主要内容,如果未能解决你的问题,请参考以下文章