设计模式(24)--访问者模式
来源:互联网 发布:055 舰首 知乎 编辑:程序博客网 时间:2024/06/15 08:30
什么是访问者模式?
在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。
优点: 1、符合单一职责原则。 2、优秀的扩展性。 3、灵活性。
缺点: 1、具体元素对访问者公布细节,违反了迪米特原则。 2、具体元素变更比较困难。 3、违反了依赖倒置原则,依赖了具体类,没有依赖抽象。
什么时候使用?
1、对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作。 2、需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作”污染”这些对象的类,也不希望在增加新操作时修改这些类。
如何实现?
public interface ComputerPart { public void accept(ComputerPartVisitor computerPartVisitor);}
public class Keyboard implements ComputerPart{ public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); }}
public class Monitor implements ComputerPart{ public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); }}
public class Mouse implements ComputerPart{ 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()}; } public void accept(ComputerPartVisitor computerPartVisitor) { for (int i = 0; i < parts.length; i++) { parts[i].accept(computerPartVisitor); } computerPartVisitor.visit(this); }}
public interface ComputerPartVisitor { public void visit(Computer computer); public void visit(Mouse mouse); public void visit(Keyboard keyboard); public void visit(Monitor monitor);}
public class ComputerPartDisplayVisitor implements ComputerPartVisitor { public void visit(Computer computer) { System.out.println("Displaying Computer."); } public void visit(Mouse mouse) { System.out.println("Displaying Mouse."); } public void visit(Keyboard keyboard) { System.out.println("Displaying Keyboard."); } public void visit(Monitor monitor) { System.out.println("Displaying Monitor."); }}
public class Client { public static void main(String[] args) { ComputerPart computer = new Computer(); computer.accept(new ComputerPartDisplayVisitor()); }}
阅读全文
0 0
- 设计模式(24)--访问者模式
- 设计模式 访问者模式
- 设计模式 - 访问者模式
- 设计模式:访问者模式
- 设计模式 - 访问者模式
- 设计模式 - 访问者模式
- 设计模式------------访问者模式
- 设计模式:访问者模式
- 设计模式--访问者模式
- 设计模式--访问者模式
- 设计模式-访问者模式
- 设计模式--访问者模式
- 设计模式-访问者模式
- 设计模式-访问者模式
- [设计模式]访问者模式
- 设计模式 - 访问者模式
- 设计模式-访问者模式
- 设计模式-访问者模式
- VMware安装Ubuntu 16.04
- 解决react-native的Navigator跳转不刷新页面的问题
- spring-控制反转,依赖注入解释
- Linux软件安装详解
- 测试++算数运算符
- 设计模式(24)--访问者模式
- PAT——1028. 人口普查
- RabbitMQ如何在命令行下清除消息队列中的所有数据
- RecyclerView简单添加头部
- java 城市三级联动,包括表的建设以及后台
- 费曼技巧学习笔记
- GPU加速xgboost——win10下配置
- 杂七杂八(1):CentOS6.5 升级glibc至2.17版本
- js select 页面返回选中原来的选项