访问者模式

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);
    }
}

运行结果

技术图片

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

 

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

在不存在的片段上调用片段生命周期和 onCreate 的问题

尝试使用片段保存夜间模式状态

是否有在单个活动中处理多个片段的 Android 设计模式?

片段管理访问错误可见 return false

如何访问 MainActivity() 中的片段元素?

使用绑定从片段访问父活动的 UI 元素