設計模式-適配器
定義
適配器模式是一種結構型設計模式,它允許接口不兼容的類能夠相互合作。在軟件中,適配器充當兩個不同類/接口之間的“橋梁”或“轉換器”。
分類
對象適配器
類適配器
對象適配器【廣泛使用】

public class ObjectAdapter {
public static void main(String[] args) {
DEAdapter adapter = new DEAdapter();
adapter.mm4();
adapter.mm5();
}
}
class DClass {
void m4() {
System.out.println("D類的m4()被執行!");
}
}
interface EInterface {
void mm4();
void mm5();
}
class DEAdapter implements EInterface{
@Override
public void mm4() {
DClass d = new DClass();
d.m4();
}
@Override
public void mm5() {
System.out.println("E接口的mm5()被實現!");
}
}
類適配器【高階使用】

public class ClassAdapter {
public static void main(String[] args) {
ABAdapter adapter = new ABAdapter();
adapter.m1();
adapter.m2();
}
}
class AClass {
public void m1() {
System.out.println("A類的m1()被執行!");
}
}
interface BInterface {
void m2();
}
// 適配器繼承A類,實現B接口,從而適配器類有了m1、m2兩個功能
class ABAdapter extends AClass implements BInterface {
@Override
public void m2() {
System.out.println("B接口的m2()被實現!");
}
}
選擇合適的適配器

其它場景

接口類
關注UserVO queryInfo()。
public interface IUserService extends IService<User> {
/**
* 詳細信息ByUserId
*
* @param userId
* @return
*/
UserVO queryInfo(Long userId);
/**
* 分頁查詢
*
* @param userPageQuery
* @return
*/
Page<UserVO> queryPage(UserPageQuery userPageQuery);
/**
* 分頁查詢ByXml
*
* @param userPageQuery
* @return
*/
Page<UserVO> queryPageByXml(UserPageQuery userPageQuery);
/**
* 列表查詢
*
* @param userQuery
* @return
*/
List<UserVO> queryList(UserQuery userQuery);
/**
* 用戶信息ByUserName
*
* @param userName
* @return
*/
User queryByUserName(final String userName);
/**
* 新增
*
* @param userDTO
*/
void add(UserDTO userDTO);
/**
* 編輯
*
* @param userDTO
*/
void edit(UserDTO userDTO);
/**
* 刪除
*
* @param userIds
*/
void del(Long[] userIds);
}
適配器類
適配器是一個抽象類,未實現接口類的UserVO queryInfo()。
public abstract class AdapterUserService implements IUserService {
@Override
public Page<UserVO> queryPage(UserPageQuery userPageQuery) {
return null;
}
@Override
public Page<UserVO> queryPageByXml(UserPageQuery userPageQuery) {
return null;
}
@Override
public List<UserVO> queryList(UserQuery userQuery) {
return null;
}
@Override
public User queryByUserName(String userName) {
return null;
}
@Override
public void add(UserDTO userDTO) {
}
@Override
public void edit(UserDTO userDTO) {
}
@Override
public void del(Long[] userIds) {
}
@Override
public boolean saveBatch(Collection<User> entityList, int batchSize) {
return false;
}
@Override
public boolean saveOrUpdateBatch(Collection<User> entityList, int batchSize) {
return false;
}
@Override
public boolean updateBatchById(Collection<User> entityList, int batchSize) {
return false;
}
@Override
public boolean saveOrUpdate(User entity) {
return false;
}
@Override
public User getOne(Wrapper<User> queryWrapper, boolean throwEx) {
return null;
}
@Override
public Optional<User> getOneOpt(Wrapper<User> queryWrapper, boolean throwEx) {
return Optional.empty();
}
@Override
public Map<String, Object> getMap(Wrapper<User> queryWrapper) {
return null;
}
@Override
public <V> V getObj(Wrapper<User> queryWrapper, Function<? super Object, V> mapper) {
return null;
}
@Override
public BaseMapper<User> getBaseMapper() {
return null;
}
@Override
public Class<User> getEntityClass() {
return null;
}
}
queryInfo()具體實現類
繼承適配器類,同時只需要實現queryInfo()。
@Component
@RequiredArgsConstructor
public class AdapterUserServiceImpl extends AdapterUserService {
private final UserMapper userMapper;
@Override
public UserVO queryInfo(Long userId) {
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getUserId, userId);
User user = userMapper.selectOne(wrapper);
return BeanUtil.copyProperties(user, UserVO.class);
}
}

浙公網安備 33010602011771號