最通俗易懂的适配器模式
适配器模式:
适配器模式 : 将一个类的接口转化成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起的那些类可以一起工作
通俗点来讲:比如有个二插插座,显然只有二插的充电器可以使用,但是三插充电器也想要使用这个插座怎么办呢?,那就重新做一个即可以满足二插的也满足三插的插座,这个新的插座就是java中的适配器
代码演示:
定义一个二插接口,三插接口
public interface PowerA {
void work();
}
public interface PowerB {
void work();
}
对应的两个实现类(二插充电器,三插充电器)
public class PowerAImpl implements PowerA {
@Override
public void work() {
System.out.println("二插充电器开始工作");
}
}
class PowerBImpl implements PowerB {
@Override
public void work() {
System.out.println("三插充电器开始工作");
}
}
写到这里,我们进行测试:
public class Test1 {
public static void main(String[] args) {
getWork(new PowerAImpl);
}
public static void getWork(PowerA power) {
System.out.println("正在连接中...");
power.work();
System.out.println("工作结束");
}
}
问题:
我们发现,写的这个方法只能传入二插的实现类,三插由于接口不兼容无法传递。
解决:
我们可以写一个适配器类,让它们都可以通过。
public class PowerAdapter implements PowerA {
private PowerB powerB;
public PowerAdapter(PowerB powerB) {
this.powerB = powerB;
}
@Override
public void work() {
powerB.work();
}
}
大功告成,最终测试
public class Test1 {
public static void main(String[] args) {
PowerA powerA = new PowerAImpl();
getWork(powerA);
PowerB powerB = new PowerBImpl();
PowerA adapter = new PowerAdapter(powerB);
getWork(adapter);
}
public static void getWork(PowerA power) {
System.out.println("正在连接中...");
power.work();
System.out.println("工作结束");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!