访问者模式
来源:互联网 发布:木门下单软件 编辑:程序博客网 时间:2024/06/18 03:51
访问者模式(Visitor Parttern)属于行为模式,主要用于将数据结构和数据操作分离。使用时,在被访问的类中添加一个方法,通常方法的参数是访问者,这样可以将自身引用传入访问者。总而言之就是,被访问者提供可以访问自身的接口,访问者来操作数据,通过这样实现解耦。可以使用在在对象结构很少变化,对对象的操作经常变化场景中,比如报表统计,过滤器等等。
一个访问计算机组件的demo:
计算机的部件的接口,对访问者提供一个accept访问方法:
public interface ComputerPart { void accept(ComputerPartVisitor computerPartVisitor);}
计算机具体的部件。访问者通过accept方法获取到当前组件的实例:
public class Keyboard implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); }}public class Monitor implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); }}public class Mouse implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); }}
包含了计算机具体的部件的计算机类:
public class Computer implements ComputerPart { ComputerPart[] parts; public Computer() { parts = new ComputerPart[]{new Mouse(), new Keyboard(), new Monitor()}; } @Override public void accept(ComputerPartVisitor computerPartVisitor) { // 遍历访问每个组件 for (int i = 0; i < parts.length; i++) { parts[i].accept(computerPartVisitor); } // 访问当前计算机实例 computerPartVisitor.visit(this); }}
访问者接口
public interface ComputerPartVisitor { void visit(Computer computer); void visit(Mouse mouse); void visit(Keyboard keyboard); void visit(Monitor monitor);}
具体的访问者
public class ComputerPartDisplayVisitor implements ComputerPartVisitor{ @Override public void visit(Computer computer) { System.out.println("Displaying Computer"); } @Override public void visit(Mouse mouse) { System.out.println("Displaying mouse"); } @Override public void visit(Keyboard keyboard) { System.out.println("Displaying keyboard"); } @Override public void visit(Monitor monitor) { System.out.println("Displaying monitor"); }}
输出结果:
Displaying mouseDisplaying keyboardDisplaying monitorDisplaying Computer
优点:符合单一职责原则,扩展性比较好
缺点:具体元素对访问者公布细节,违反了迪米特原则。
阅读全文
1 0
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- centos7 swoole安装笔记
- 将github的项目下载到本地的MyEclipse
- 慢慢慢·周末·懒起画峨眉
- Node js 抛 events.js:160 throw er; // Unhandled 'error' event
- 关于crontab和crond
- 访问者模式
- MODBUS TCP和MODBUS RTU的差别
- json前后端传输(ajax异步提交)
- 待补充
- Python数据分析常用手册——Numpy和Pandas
- ffmpeg 参数解析
- 多线程同步
- 组播地址规划
- CSS之创建等高列布局之三