JAVA设计模式-适配器模式
介绍
适配器模式是一种结构型模式,它主要解决接口之间的兼容问题。当我们需要使用某个类的接口时,但是这个类的接口目前并不符合我们使用需求,不能直接使用,那我们可以采取调整类和接口的方式,但是如果这个接口是第三方提供的,修改不了或者类和接口目前大量使用,并且使用稳定,不能轻易改动时,我们可以使用适配器模式,在不改动这个类的前提下来满足目前系统的需求。生活中也有例子,例如:生活中m2硬盘转SATA接口的转换卡、美版、港版与国行的电源适配器。
图例
角色
- 目标接口(Target):定义满足目前系统需求的接口,可以是抽象类或者接口。
- 适配者类(Adapter):与目前系统需求不兼容的类,需要被适配的类。
- 适配器类(Adapter):实现目标抽象类或者接口和适配者类之间的转换。
- 客户类(Client):调用目标接口。
优点
- 将目标类和适配者类解耦,不需要改变原有代码即可满足目前需求。
- 具有较高的灵活性和可扩展性。
代码示例-以m2硬盘转SATA接口为例
InterfaceSata(Target)
/**
* All rights Reserved, Designed By monkey.blog.xpyvip.top
*
* @version V1.0
* @Package com.xpyvip.designpattern.adapter
* @Description: SATA接口
* @Author: xpy
* @Date: Created in 2022年10月04日 7:52 下午
*/
public interface InterfaceSata {
String installInterfaceSata();
}
HardDiskM2(Adapter)
/**
* All rights Reserved, Designed By monkey.blog.xpyvip.top
*
* @version V1.0
* @Package com.xpyvip.designpattern.adapter
* @Description: m2硬盘
* @Author: xpy
* @Date: Created in 2022年10月04日 7:50 下午
*/
public class HardDiskM2 {
public String installInterfaceM2(){
System.out.println("m2硬盘安装接口是m2");
return "m2";
}
}
InterfaceAdapter(Adapter)
/**
* All rights Reserved, Designed By monkey.blog.xpyvip.top
*
* @version V1.0
* @Package com.xpyvip.designpattern.adapter
* @Description: 适配器
* @Author: xpy
* @Date: Created in 2022年10月04日 7:53 下午
*/
public class InterfaceAdapter implements InterfaceSata {
private HardDiskM2 hardDiskM2;
public InterfaceAdapter(HardDiskM2 hardDiskM2) {
this.hardDiskM2 = hardDiskM2;
}
public String installInterfaceSata() {
String m2 = hardDiskM2.installInterfaceM2();
// 进行m2接口转换sata接口逻辑
// ......
return "sata";
}
}
Client
/**
* All rights Reserved, Designed By monkey.blog.xpyvip.top
*
* @version V1.0
* @Package com.xpyvip.designpattern.adapter
* @Description: 客户类
* @Author: xpy
* @Date: Created in 2022年10月04日 8:28 下午
*/
public class Client {
public static void main(String[] args) {
InterfaceSata interfaceSata = new InterfaceAdapter(new HardDiskM2());
interfaceSata.installInterfaceSata();
}
}
关注微信公众号「平哥技术站」, 每日更新,在手机上阅读所有教程,随时随地都能学习。
觉得写的还不错的小伙伴,请作者喝杯咖啡☕ ,支持一下。😊
如有侵权请立即与我们联系,我们将及时处理,联系邮箱:865934097@qq.com。
评论区