设计模式学习笔记--访问者模式
来源:互联网 发布:ansible 支持windows 编辑:程序博客网 时间:2024/05/22 03:21
二十五、访问者模式
访问者模式(Visitor Pattern),对外提供一个访问者,该访问者可以包含不同的访问逻辑,
去调用不同的元素算法。
简介
访问者模式,旨在将数据结构与数据操作相分离。
- 优点:符合单一原则,扩展性好,灵活。
- 缺点:违反迪米特原则,公开元素反问细节。违法依赖倒置原则。
实现
创建接受操作的接口ComputerPart
,并实现该接口,Keyboard
,Mouse
,Monitor
,以及包含其他部分的一个综合实现类Computer
。再创建一个访问接口,内部包含不同的方法重载,访问不同的元素组建。
- 创建操作接口
ComputerPart.java
public interface ComputerPart { public void accept(ComputerPartVisitor computerPartVisitor);}
- 创建元素实现类
Keyboard.java
public class Keyboard implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); }}
Monitor.java
public class Monitor implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); }}
Mouse.java
public class Mouse implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); }}
还有一个综合实现类,包含其他组件元素的一个整体类。 Computer.java
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); }}
- 创建访问接口
ComputerPartVisitor.java
public interface ComputerPartVisitor { public void visit(Computer computer); public void visit(Mouse mouse); public void visit(Keyboard keyboard); public void visit(Monitor monitor);}
- 实现访问接口
ComputerPartDisplayVisitor.java
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."); }}
- 演示
public class VisitorPatternDemo { public static void main(String[] args) { ComputerPart computer = new Computer(); computer.accept(new ComputerPartDisplayVisitor()); }}
- 输出
Displaying Mouse.Displaying Keyboard.Displaying Monitor.Displaying Computer.
0 0
- 设计模式学习笔记--访问者(Visitor)模式
- 设计模式学习笔记十二:访问者模式
- 设计模式学习笔记--访问者模式
- 《设计模式》笔记: 访问者模式
- 设计模式笔记-访问者模式
- 设计模式笔记--访问者模式
- 设计模式笔记:访问者模式
- 设计模式学习-----访问者模式
- 设计模式学习--访问者模式
- 设计模式学习--访问者模式
- 学习设计模式-访问者模式
- 设计模式学习笔记二十四(Visitor访问者模式)
- 设计模式学习笔记(二十)—Visitor访问者模式
- 设计模式学习笔记——访问者模式
- 设计模式学习笔记——访问者模式
- 设计模式学习笔记——访问者模式
- 设计模式学习笔记——访问者模式
- java/android 设计模式学习笔记(24)---访问者模式
- 力学现象动画演示——真空状态下的自由落体运动
- 最常用的PHP正则表达式收集整理
- IOC 和 AOP
- linux awk详解
- 8051汇编语言-延迟函数
- 设计模式学习笔记--访问者模式
- acm字母统计
- 【leetcode】50. Pow(x, n)
- java jdk设置内存大小
- CSS3伪类与伪元素的区别及注意事项
- java基础语法
- PAT(A) 2016.12.10 考试总结
- Java中字符串中子串的查找
- ADMM(alternating direction method of multipliers)