访问者模式
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 的问题