设计模式-适配器

定义

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

分类

对象适配器

类适配器

对象适配器【广泛使用】

对象适配器-功能合并

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);
    }
}
posted @ 2025-09-09 15:32  南翔技校毕业后  阅读(70)  评论(0)    收藏  举报