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)。
您的目标是“将 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/