设计模式之☞适配器模式,通俗易懂,一学就会!!!
简介#
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。
功能展示#
场景模拟#
外国出差,给笔记本充电,德国有一套德国标准,中国有一套中国标准(国标),国际有一套国际标准,插排上有不同的孔,二孔、三孔等等(案例不一定真实)。。。
功能介绍#
- 给笔记本充电
代码实现#
德国标准#
德国接口:DBSocket.java#
package com.cyb.ssm.design_pattern.adapter; /** * 德国标准的插排 * @author apple * */ public interface DBSocket { void charge(); }
德国接口实现:DBSocketImpl.java#
package com.cyb.ssm.design_pattern.adapter; /** * 德国标准的插排 * @author apple * */ public class DBSocketImpl implements DBSocket { @Override public void charge() { System.out.println("使用两眼插孔充电。。。"); } }
国标标准(中国)#
国标接口:GBSocket.java#
package com.cyb.ssm.design_pattern.adapter; /** * 中国标准的插排 * * @author apple * */ public interface GBSocket { void charge(); }
国标接口实现:GBSocketImpl.java#
package com.cyb.ssm.design_pattern.adapter; /** * 中国标准的插排 * @author apple * */ public class GBSocketImpl implements GBSocket { @Override public void charge() { System.out.println("使用三眼插孔充电。。。。"); } }
国际标准#
国际标准接口:GJBZSocket.java#
package com.cyb.ssm.design_pattern.adapter; /** * 国际标准插排 * * @author apple * */ public interface GJBZSocket { void charge(); }
国际标准接口实现:GJBZSocketImpl.java#
package com.cyb.ssm.design_pattern.adapter; /** * 国际标准插排 * * @author apple * */ public class GJBZSocketImpl implements GJBZSocket { @Override public void charge() { System.out.println("使用四眼插孔充电。。。。"); } }
适配器(重点)#
适配类:SocketAdapter.java#
package com.cyb.ssm.design_pattern.adapter; /** * 适配器(将不同类型的国标和德标都适配成国际标准) * * @author apple * @param <T> * */ public class SocketAdapter<T> implements GJBZSocket { private T socket; public SocketAdapter(T socket) { super(); this.socket = socket; } @Override public void charge() { if (socket instanceof GBSocket) { // 适配国标 ((GBSocket) socket).charge(); // 强转数据类型,执行 } else if (socket instanceof DBSocket) { // 适配德标 ((DBSocket) socket).charge(); // 强转数据类型,执行 } else if (socket instanceof GJBZSocket) { // 适配国际标准 ((GJBZSocket) socket).charge(); // 强转数据类型,执行 } } }
测试类:TestAdapter.java#
package com.cyb.ssm.design_pattern.adapter; import org.junit.Test; /** * 适配器模式: 将不同类型的对象可以通过适配模式,在一起工作 * * @author apple * */ public class TestAdapter { @Test public void test() { // 德标 SocketAdapter<DBSocketImpl> socketAdapter1 = new SocketAdapter<DBSocketImpl>(new DBSocketImpl()); socketAdapter1.charge(); // 国标 SocketAdapter<GBSocketImpl> socketAdapter2 = new SocketAdapter<GBSocketImpl>(new GBSocketImpl()); socketAdapter2.charge(); // 国际标准 SocketAdapter<GJBZSocketImpl> socketAdapter3 = new SocketAdapter<GJBZSocketImpl>(new GJBZSocketImpl()); socketAdapter3.charge(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?