java - 这段代码是适配器模式的示例吗?

标签 java oop design-patterns adapter

PageInfo类

public class PageInfo<T> implements Serializable {
    private static final long serialVersionUID = 1L;
    private int pageNum;
    private int pageSize;
    private int size;
    private int startRow;
    private int endRow;
    private long total;
    private int pages;
    private List<T> list;
}

对类的响应

public class ResponseDto<T> implements Serializable {

    private String msg = "success";

    private int code = SUCCESS;

    private T data;
}

PageResponseDto 类

public class PageResponseDto<T> extends ResponseDto<List<T>> {

    private int pageNum;

    private int pageSize;

    private int size;

    private long total;

    private int pages;

    public PageResponseDto() {
        super();
    }

    public PageResponseDto(PageInfo<T> p) {
        super(p.getList());
        this.pageNum = p.getPageNum();
        this.pageSize = p.getPageSize();
        this.size = p.getSize();
        this.total = p.getTotal();
        this.pages = p.getPages();
    }
}

使用

public PageResponseDto<OrderDto> findStoreOrderByPage(Integer pageNum, Integer pageSize) {
    PageHelper.startPage(pageNum, pageSize);
    List<OrderDto> storeOrderList = basicDataMapper.findStoreOrderByPage();
    PageInfo<OrderDto> p = new PageInfo<>(storeOrderList);
    return new PageResponseDto<>(p);
}

因为系统有一个统一的返回类'ResponseDto',所以我想将类PageInfo转换为ResponseDto。所以写了这段代码。我有一个问题 这段代码可以称为适配器模式吗?如果没有,这段代码是否使用了设计模式?或者这个转换应该叫什么?

最佳答案

当前设计

就目前情况而言,这段代码没有实现适配器模式。就众所周知的设计模式而言,这段代码不满足我所知道的任何设计模式。相反,下面的设计使用基本的软件原理:继承和伪委托(delegate)。

uml diagram

您的目标是“将 PageInfo 转换为 ResponseDto”。我假设您的意思是您想要传递一个封装并委托(delegate)给 PageInfo 类的 ResponseDto 实例。

之所以这不是适配器模式的示例,是因为当前没有 ResponseDto 独有的接口(interface)。事实上,它根本没有界面,也没有对 PageInfo 的委托(delegate) – 问题 1。

适配器模式专门用于封装不同的接口(interface)。


注释/建议/问题:

  • PageResponseDTO 目前违反了迪米特定律;它对PageInfo的内部结构了解太多。
  • PageInfo 通过揭示其整个内部结构来打破封装。
  • 与其从 PageResponseDTO 复制 PageInfo 中的所有内容,为什么不只保留对 PageInfo 实例的引用,并在必要时委托(delegate)给它呢?
  • 您始终可以复制委托(delegate)的接口(interface)而不是公开它,但是,如果您发现自己复制了太多其功能接口(interface),请考虑公开它。在《重构》中,Martin Fowler 分别将此称为“封装委托(delegate)”和“消除中间人”。

关于java - 这段代码是适配器模式的示例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54219962/

相关文章:

java - 创建仅具有 final方法的抽象类有什么好处?

java - 如何修复 Java 中的 UDP 服务器?

design-patterns - 扩展对象模式和适配器模式有什么区别?

java - 我应该在构造函数中使用 .clone() 吗?

java序列化工作异常?

java - 在 Eclipse 插件中使用时反射库不起作用

java - 使用 Mockito 测试服务的删除方法

Javascript对象聚合: cannot call method of inner object

java - 在调用调用代理以聚合来自多个端点的数据的方法时,我可以使用什么模式来部分成功?

design-patterns - Python 设计模式,交叉导入