• 面试官:设计模式中的适配器模式是什么?


    天道酬勤
    文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟!回复【项目】有我为大家准备的一些项目源码。回复【简历模板】有我为大家准备的简历模板。

    在这里插入图片描述


    前言

    吃完晚饭洗完澡,宿舍床上一趟,啧啧,每天最幸福的时光就是现在的这个时候,悠闲的躺在床上什么都不用想,就是刷手机。

    就在我看手机上的汉子跳舞正入迷的时候,下铺老黑扒着我的床沿向上探出了头。

    老黑是老家那边农村来的,个子不高但是身体很壮实,皮肤黝黑,见人总是爱笑,笑起来两排白牙格外耀眼。

    老黑:“奇哥,借我用一下充电器呗。”

    奇哥:“怎么,你充电器忘了拿回来啊。”

    老黑:“拿回来了,但是充不上去电,而且线还有点麻。”

    奇哥:“线麻?这是什么鬼,把你充电器拿过来我瞧瞧。”

    老黑:“给。”

    奇哥:“好家伙,你这充电器都这样了能不麻么,电没充给手机,都充你身上去了。”

    在这里插入图片描述
    老黑:“嘿嘿,那我把你充电器拿下来用了哈,明天我买了新充电器再还给你。”

    奇哥:“拿走吧。”

    过了大约五分钟

    老黑:“奇哥,你的充电器也有点麻了。”

    奇哥:“怎么可能,我用的时候没有事啊,你拿上来我看看。”

    在这里插入图片描述
    奇哥:“我给你的时候好好的,你怎么搞成这样了。”

    老黑:“我刚刚插手机插不上去,我就使劲插,结果就成这样了。”

    奇哥:“哎呀,你太笨了,手机和充电器要适配的,不适配怎么用啊,我来给你讲讲什么是适配吧。”

    老黑:“好。”

    一、面试

    面试官:你可以说一下设计模式中的适配器模式吗?

    我:适配器模式其实就是将一个类的接口转换成客户希望的另一个接口,适配器模式让那些接口不兼容的类可以一起工作。

    面试官:你可以说一下适配器模式有哪些角色吗?

    我:适配器模式有3种角色

    1、Target(目标抽象类):目标抽象类定义客户所需的接口,可以是一个抽象类或接口,也可以是具体类。在类适配器中,由于Java语言不支持多重继承,它只能是接口。

    2、Adapter(适配器类):它可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配。适配器Adapter是适配器模式的核心,在类适配器中,它通过实现Target接口并继承Adaptee类来使二者产生联系,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。

    3、Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下甚至没有适配者类的源代码。

    面试官:你可以写一个适配器模式的代码实现吗?

    1、首先写一个汽车控制类,充当目标抽象类

    public abstract class CarController {
        public void move(){
            System.out.println("玩具汽车移动!");
        }
        public abstract void phonate();//发出声音
        public abstract void twinkle();//灯光闪烁
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2、然后写一个警笛类,充当适配者

    public class PoliceSound {
        public void alarmSound(){
            System.out.println("发出警笛声音!");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3、然后写一个警灯类,充当适配者

    public class PoliceLamp {
        public void alarmLamp(){
            System.out.println("呈现警灯闪烁!");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4、然后写一个警车适配器类,充当适配器

    public class PoliceCarAdapter extends CarController{
    
        private PoliceSound sound;  //定义适配者PoliceSound对象
        private PoliceLamp lamp;    //定义适配者PoliceLamp对象
    
        public PoliceCarAdapter(){
            sound = new PoliceSound();
            lamp = new PoliceLamp();
        }
        //发出警笛声
        public void phonate() {
            sound.alarmSound(); //调用适配者类PoliceSound的方法
        }
    
        @Override
        public void twinkle() {
            lamp.alarmLamp();   //调用适配者类PoliceLamp的方法
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    5、测试类

    public class Test {
        public static void main(String[] args) {
            CarController car = new PoliceCarAdapter();
            car.move();
            car.phonate();
            car.twinkle();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    面试官:还是你的设计模式回答的有意思,什么时候能入职呢?

    我:再等等吧,现在工地上干的正舒服呢。

    二、总结

    这里的相关内容还没有整理完毕,文章后面持续更新,建议收藏。

    文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。

    如果觉得我的文章还不错的话就点个赞吧,另外可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟!回复【项目】有我为大家准备的一些项目源码。回复【简历模板】有我为大家准备的简历模板。

  • 相关阅读:
    GCC详解的-Wl选项说明与测试
    Linux--vim
    「格创东智」获数亿元B轮融资,深度聚焦半导体和新能源数智升级
    WordPress(7)js代码增加网页底部 本站已稳定运行了X天
    HTB靶场之Sandworm
    Xamarin.Andorid实现界面弹框
    【正点原子STM32连载】 第二十五章 TFTLCD(MCU屏)实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
    基于数据库的全文检索实现
    vb圣经加注释
    Kafka 消息队列 ( 一 ) 基本概念
  • 原文地址:https://blog.csdn.net/weixin_44096133/article/details/125860880