面试官:设计模式中的适配器模式是什么?
天道酬勤
文章持续更新,可以微信搜索【小奇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
- 点赞
- 收藏
- 关注作者
评论(0)