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

天道酬勤
文章持续更新,可以微信搜索【小奇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();//灯光闪烁
}

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

public class PoliceSound {
    
    
    public void alarmSound(){
    
    
        System.out.println("发出警笛声音!");
    }
}

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

public class PoliceLamp {
    
    
    public void alarmLamp(){
    
    
        System.out.println("呈现警灯闪烁!");
    }
}

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的方法
    }
}

5、测试类

public class Test {
    
    
    public static void main(String[] args) {
    
    
        CarController car = new PoliceCarAdapter();
        car.move();
        car.phonate();
        car.twinkle();
    }
}

在这里插入图片描述

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

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

二、总结

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

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

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

猜你喜欢

转载自blog.csdn.net/weixin_44096133/article/details/125860880