前言

博主github

博主个人博客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());
    }
}