前言:适配器模式主要解决什么问题呢?简单地说:“就是需要的东西就在你面前,但却不能用,而短时间又无法改造它,于是我们就想办法去适配它”
文章目录:
- 简介
- 概念
- 作用
- 优、缺点
- 代码案例
一、简介
适配器模式(Adapter Pattern)是一种结构型设计模式;用于将一个类的接口转换成另一个接口,从而满足客户端对接口的需求;在适配器模式中,适配器充当一个中间层,通过实现目标接口并持有原始类的实例来实现对原始类的封装和转换。客户端只需要调用目标接口中定义的方法即可完成对原始类的调用。
二、适配器模式的概念
适配器模式(Adapter Pattern)将一个类的接口转换成客户端所希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
简单理解就是:将一个类的接口转换成另一个接口,从而满足客户端对接口的需求;
三、适配器模式的作用
适配器模式的作用包括以下几个方面:
-
通过适配器模式,我们可以重用已有的类,并将其接口转换成客户端需要的接口,从而避免了代码的重复编写和维护。
-
当两个类的接口不兼容时,我们可以使用适配器模式来解决这个问题,将一个类的接口转换成另一个类的接口,从而实现二者之间的协作。
-
适配器模式可以增加类的透明性,使得客户端无需知道原始类的存在,只需要调用目标接口中定义的方法即可完成对原始类的调用。
-
通过适配器模式,我们可以在不修改现有代码的情况下增加新的功能或接口,从而提高代码的灵活性和可扩展性。
四、适配器模式的优、缺点
适配器模式的优点包括以下几个方面:
-
重用已有的类
-
解决接口不兼容问题
-
增加类的透明性
-
提高代码灵活性
适配器模式缺点包括一下几个方面:
-
增加代码复杂度
-
可能会影响系统性能
五、代码案例
1)首先创建接口
package dom.adapter.inter;
import dom.adapter.entity.UserEntity;
import dom.adapter.impl.UserService;
/***
* @Date(时间)2023-06-05
* @Author 半杯可可
*/
public interface InserFaces {
UserEntity user();
}
2)创建个实体类方便测试
注意:我依赖了lombok包,lombok包会自动生成JavaBean 所需的 get、set、toString、hashCode等
package dom.adapter.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/***
* @Date(时间)2023-06-05
* @Author 半杯可可
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UserEntity {
public String name ;
}
3)创建相关类
1)创建UserService类实现InserFaces接口
package dom.adapter.impl;
import dom.adapter.entity.UserEntity;
import dom.adapter.inter.InserFaces;
/***
* @Date(时间)2023-06-05
* @Author 半杯可可
*/
public class UserService implements InserFaces {
/***
* 模拟从数据库中查询数据
* @return
*/
@Override
public UserEntity user() {
System.out.println("从本地数据库中查询用户对象");
//模拟从数据库查询返回一个user对象
UserEntity user = new UserEntity();
user.setName("张三");
return user;
}
}
2)创建OtherDataService类
package dom.adapter.impl;
/***
* @Date(时间)2023-06-05
* @Author 半杯可可
*
* 第三方 方法服务,同样是返回用户信息
*/
public class OtherDataService {
/**
* 调用第三方接口返回的用户信息,是一个字符串
* @return
*/
public String getUser() {
System.out.println("调用第三方");
return "李四" ;
}
}
3)创建OtherDataAdapter 类实现InserFaces接口
package dom.adapter.impl;
import dom.adapter.entity.UserEntity;
import dom.adapter.inter.InserFaces;
/***
* @Date(时间)2023-06-05
* @Author 半杯可可
*
* 第三方接口适配器 与自身系统业务逻辑方法进行对接
*/
public class OtherDataAdapter implements InserFaces {
/**
* 声明第三方业务对象
* @return
*/
private OtherDataService service = new OtherDataService() ;
@Override
public UserEntity user() {
System.out.println("从第三方获取对象数据");
//模拟从数据库查询返回一个user对象
UserEntity user = new UserEntity();
user.setName(service.getUser());
return user;
}
}
4)代码Main测试
package dom.adapter;
import dom.adapter.impl.OtherDataAdapter;
import dom.adapter.impl.UserService;
import dom.adapter.inter.InserFaces;
/***
* @Date(时间)2023-06-05
* @Author 半杯可可
*/
public class Mains {
public static void main(String[] args) {
InserFaces inserFaces = new UserService() ;
System.out.println(inserFaces.user().getName());
InserFaces faces = new OtherDataAdapter();
System.out.println(faces.user().getName());
}
}
总结:
适配器模式在Java中广泛应用于各种场景,例如,将旧版API适配到新版API、将不同的数据格式适配到统一的数据格式等。所以,适配器模式是个非常非常重要的,是个非常强的设计模式!