设计模式之访问数据结构_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、总结

使用场景:如果说我们的代码中不知道要使用哪个接口来调用其中的数据,那么就从方法中传入



感兴趣的,欢迎添加博主微信

哈,博主很乐意和各路好友交流,如果满意,请打赏博主任意金额,感兴趣的在微信转账的时候,备注您的微信或者其他联系方式。添加博主微信哦。

请下方留言吧。可与博主自由讨论哦

微信 微信公众号 支付宝
微信 微信公众号 支付宝
posted @ 2019-08-26 15:25  HealerJean  阅读(153)  评论(0编辑  收藏  举报