白话适配器模式,通俗易懂
肥宅很喜欢听音乐,有一天他在湖边一边听音乐一边踩单车,听得正嗨,一不小心旁边有个人穿过,肥宅一个刹车,结果自己用了多年的肾5掉进湖里了。肥宅赶紧捞起自己的肾5,发现已经用不了,肥宅这下心疼死了。
过了几天,肾7出了,肥宅忍一忍,用自己存了很久的钱买了台肾7。肥宅并没了解过肾7有什么改变,结果想用自己以前的耳机,发现居然肾7没有耳机圆孔,这下怎么办,怎么插下去。肥宅赶紧找手机店的老板,沟通一番,原来肾7没有耳机孔了,这下怎么办,两个口不匹配,这下怎么办,原来苹果出了一个转换器,买一个转换器就可以听歌了,肥宅无奈之下,又花钱买了一个转换器。
没有耳机圆孔的iphone7
只能插入到圆孔的耳机
有线耳机听歌需要经过lightning口
新出的适配器
好了,讲了一长段故事,其实重点讲的就是适配器模式。当接口不匹配的时候怎么办,耳机口和lightning口不匹配,于是适配器出现了,可以插入lightning口,又有耳机插入的圆孔(实现了旧接口,又组合了新接口),适配器模式讲的就是这个意思。下面看看代码。
public class IPhone7 {
//iphone7有lightning口,没有听歌用的圆孔
public Lightning lightning;
public void setLightning(Lightning lightning)
{
this.lightning=lightning;
}
//听歌只能用lightning口
public void listenMusic()
{
lightning.listenMusic();
}
}
//要听歌除了无线必需要必须用lightning
public interface Lightning {
void listenMusic();
}
//耳机圆孔
public interface Circle {
void listenMusic();
}
//耳机插入到圆孔就能听歌
public class Earphone implements Circle{
@Override
public void listenMusic() {
// TODO 自动生成的方法存根
System.out.println("肥宅用圆孔耳机听歌");
}
}
//适配器实现了lightning口,可以插入到lightning口
public class Adapter implements Lightning{
//同时有耳机圆孔
public Circle circle;
public Adapter(Circle circle)
{
this.circle=circle;
}
@Override
public void listenMusic() {
// TODO 自动生成的方法存根
circle.listenMusic();
}
}
public class 肥宅 {
public static void main(String[] args) {
//买了一个一台iphone7
IPhone7 iphone=new IPhone7();
//有一个插入到圆孔就可以听歌的旧耳机
Circle circle=new Earphone();
//买一个适配器,适配器上插上耳机
Adapter adpter=new Adapter(circle);
//在lightning口上插上买的适配器
iphone.setLightning(adpter);
//通过适配器实现了用lightning口听歌
iphone.listenMusic();
}
}
那么问题来了
适配器模式有点亡羊补牢的意思?
是的,我们一般不会刻意去使用适配器模式,适配器模式一般不会出现在设计阶段。
有没有在设计的时候就用适配器模式?
有的,当项目使用第三方接口的时候,我们没有必要根据他的接口去改变我们自己的接口,应用适配器就可以。
设计模式好像很少用到?
不要为了使用而使用,这样反而会过度设计,看哪种模式能帮助我们就行了,所以先了解设计模式,用到的时候才不会方恨少。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?