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

举报
小奇JAVA 发表于 2022/07/20 23:03:40 2022/07/20
【摘要】 天道酬勤 文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟!回复【项目】有我为大家准备的一些项目源码。回复【简历模板】有我为大家准备的简历模板。 ...

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

文章来源: xiaoqijava.blog.csdn.net,作者:旷世奇才李先生,版权归原作者所有,如需转载,请联系作者。

原文链接:xiaoqijava.blog.csdn.net/article/details/125860880

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。