设计模式之访问数据结构_Visitor访问者模式_访问数据结构并处理数据
前言
博主github
博主个人博客http://blog.healerjean.com
1、解释
您在朋友家做客,您是访问者,朋友接受您的访问,您通过朋友的描述(这就是数据),然后对朋友的描述做出一个判断(相当于处理数据),这就是访问者模式。
把结构和数据分开,编写一个访问者,去访问数据结构中的元素,然后把对各元素的处理全部交给访问者类。这样,当需要增加新的处理时候,只需要编写新的 访问者类,让数据结构可以接受访问者的访问即可。
仔细联想其实,也用过的哦,在多点的时候,王一博下来帮我开发,当时就用到了这个玩意,其实就是传入了一个消费者接口,到了后面我传入数据,自然就消费了
2、实例代码
以电脑装机为例。需求是,想组装一台电脑,有三个硬件,显卡,CPU和硬盘,想装进电脑主机箱里面,只能采取接口的方式。首先我们假设使用的是usb接口去连接。
2.1、电脑零部件抽象父类
/**
* 电脑的零配件的父抽象类
*/
public abstract class BaseComputerPart {
/**
* 所有的 零配件,都必须通过一个硬件接口进行连接
*/
protected abstract void link(HardwareInter hardwareInter);
}
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、测试
/**
* @author HealerJean
* @ClassName Main
* @date 2019/8/14 20:29.
* @Description 使用场景,我们提前知道最后要调用什么接口实现类,但是实际处理中不知道调用哪个接口,可以预先传入接口
*/
public class Main {
public static void main(String[] args) {
//创建一个cpu
BaseComputerPart cpu = new Cpu();
//cpu连接接口
cpu.link(new UsbImpl());
}
}
3、总结
使用场景:如果说我们的代码中不知道要使用哪个接口来调用其中的数据,那么就从方法中传入
感兴趣的,欢迎添加博主微信
哈,博主很乐意和各路好友交流,如果满意,请打赏博主任意金额,感兴趣的在微信转账的时候,备注您的微信或者其他联系方式。添加博主微信哦。
请下方留言吧。可与博主自由讨论哦
微信 | 微信公众号 | 支付宝 |
---|---|---|