设计模式之访问数据结构_Visitor访问者模式_访问数据结构并处理数据
前言
博主个人博客http://blog.healerjean.com
1、Visitor访问者模式
1.1、解释
您在朋友家做客,您是访问者,朋友接受您的访问,您通过朋友的描述(这就是数据),然后对朋友的描述做出一个判断(相当于处理数据),这就是访问者模式。
把结构和数据分开,编写一个访问者,去访问数据结构中的元素,然后把对各元素的处理全部交给访问者类。这样,当需要增加新的处理时候,只需要编写新的 访问者类,让数据结构可以接受访问者的访问即可。
仔细联想其实,也用过的哦,在多点的时候,王一博下来帮我开发,当时就用到了这个玩意,其实就是传入了一个消费者接口,到了后面我传入数据,自然就消费了
使用场景:如果说我们的代码中不知道要使用哪个接口来调用其中的数据,那么就从方法中传入
1.2、示例代码
以电脑装机为例。需求是,想组装一台电脑,有三个硬件,显卡,CPU和硬盘,想装进电脑主机箱里面,只能采取接口的方式。首先我们假设使用的是usb接口去连接。
1.2.1、电脑零部件抽象父类
/**
* 电脑的零配件的父抽象类
*/
public abstract class BaseComputerPart {
/**
* 所有的 零配件,都必须通过一个硬件接口进行连接
*/
protected abstract void link(HardwareInter hardwareInter);
}
1.2.2、访问者接口
public interface HardwareInter {
void visitor(Cpu cpu);
}
2.3、零部件子类cpu
public class Cpu extends BaseComputerPart {
@Override
protected void link(HardwareInter hardwareInterface) {
// 先得通过接口连接数据
hardwareInterface.visitor(this);
// 连接完了之后,就开始使用cpu
System.out.println("连接上了之后,利用cpu进行计算数据");
}
}
2.4、访问者USB一、
public class UsbImpl implements HardwareInter{
@Override
public void visitor(Cpu cpu) {
System.out.println("usb连接cpu"+cpu);
}
}
2.5、测试
public class Main {
public static void main(String[] args) {
//创建一个cpu
BaseComputerPart cpu = new Cpu();
//cpu连接接口
cpu.link(new UsbImpl());
}
}