适配器(Adapter)模式
来源:互联网 发布:禁毒网络知识登录竞赛 编辑:程序博客网 时间:2024/06/05 19:48
1.意图
适配器模式的意图在于,使用不同接口的类所提供的服务为客户端提供它所期望的接口。
2.解释
- 简单来说,适配器模式可以将适配器中的其他不兼容的对象包装成与另一个类兼容。
- 在软件工程中,适配器模式是一种软件设计模式,允许将现有类的接口用作另一个接口。它通常用于使现有的类与其他类一起工作,而无需修改其源代码。
3.使用场景
你想使用一个现有的类,它的接口与你所需要的不匹配
你想创建一个可重用的类,与无关或不可预见的类合作(
不一定具有兼容接口的类)需要使用几个现有的子类,但是通过对每个子类进行子类化来适应它们的接口是不切实际的。对象适配器可以调整其父类的接口。
大多数使用第三方库的应用程序都使用适配器作为应用程序和第三方库之间的中间层,以将应用程序与库脱钩。如果必须使用另一个库,则只需要新库的适配器,而无需更改应用程序代码。
案例场景:现在新出的手机充电的基本都是TypeC接口,而对于很多用户来说,他们都有usb接口的数据线,为了能让usb接口的数据线给TypeC接口的手机充电,我们则需要有一个usb转TypeC的转换器,这样便能充电了
1.现在我们有一个TypeCCharge接口和UsbCharge类
public interface TypeCCharge { void chargeWithTypeC();}
public class UsbCharge { private static final Logger logger = LoggerFactory.getLogger(UsbCharge.class); public void chargeWithUsb(){ logger.info("phone is charging with usb."); }}
2.我们期望能使用TypeC接口给手机充电
public class ChargeWithTypeC implements TypeCCharge { private TypeCCharge typeCCharge; public ChargeWithTypeC(TypeCCharge typeCCharge) { this.typeCCharge = typeCCharge; } public void setTypeCCharge(TypeCCharge typeCCharge) { this.typeCCharge = typeCCharge; } public void chargeWithTypeC() { typeCCharge.chargeWithTypeC(); }}
3.现在我们需要一个适配器,达到用TypeC接口给手机充电的目的
public class UsbChargeAdapter implements TypeCCharge { private UsbCharge usbCharge; public UsbChargeAdapter() { usbCharge = new UsbCharge(); } public void chargeWithTypeC() { usbCharge.chargeWithUsb(); }}
4.现在我们就能使用TypeC接口给手机充电了
public static void main(String[] args) { ChargeWithTypeC charge = new ChargeWithTypeC(new UsbChargeAdapter()); charge.chargeWithTypeC();}
参考教程:https://github.com/iluwatar/java-design-patterns/tree/master/adapter
阅读全文
0 0
- 适配器模式(Adapter)
- 适配器模式(Adapter)
- 适配器(Adapter)模式
- ADAPTER(适配器)模式
- 适配器模式(adapter)
- 适配器模式(Adapter)
- Adapter(适配器)模式
- 适配器模式(Adapter)
- 适配器(Adapter)模式
- Adapter(适配器模式)
- 适配器模式(adapter)
- 适配器(Adapter)模式
- 适配器模式(Adapter)
- 适配器模式(Adapter)
- 适配器(Adapter)模式
- 适配器(Adapter)模式
- 适配器模式(Adapter)
- 适配器模式(Adapter)
- 344. Reverse String(第四周)
- org.apache.axis2.databinding.ADBException: Unexpected subelement arg0 的解决方法
- JavaScript基础案例实现
- windows下图片标识工具labelimg的安装与使用
- SpringMVC统一异常处理
- 适配器(Adapter)模式
- 进程IPC---流式套接字
- java访问数据库
- 数据结构循环链表与双链表实验
- linux matlab2016b 安装
- redis 性能相关方面
- 操作系统-PV操作
- [PAT乙] 1014. 福尔摩斯的约会 (20)
- Goroutine的调度分析(二)