设计模式-适配器
定义
适配器模式是一种结构型设计模式,它允许接口不兼容的类能够相互合作。在软件中,适配器充当两个不同类/接口之间的“桥梁”或“转换器”。
分类
对象适配器
类适配器
对象适配器【广泛使用】

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号