介绍:将一个请求封装为对象,从而根据不同的请求对客户进行参数化。
特点:达到调用操作与具体执行者解耦
结构:
抽象命令类、
具体命令类、
接收者Receiver(具体执行命令的角色)、
调用者Invoker(根据请求执行命令)
实现:
1、声明命令接口
public interface MyjPageModuleDataService {
## 根据请求获取自定义数据
List<PageModuleDataVO> getCustomModuleData(PageModuleDataRequest request);
## 组件标识
MyjModuleEnum module();
}
2、构建具体命令实现类
## 商品优惠券组件信息
public class MyjGoodsCouponModuleServiceImpl implements MyjPageModuleDataService {
@Resource
private RenovationProgrammeDependency programmeDependency;
@Override
public List<PageModuleDataVO> getCustomModuleData(PageModuleDataRequest request) {
GetProgrammeBySaasIdResponse programme = programmeDependency.getProgramme(getProgramBySaasIdRequest);
}
@Override
public MyjModuleEnum module() {
return MyjModuleEnum.MYJ_GOODS_COUPON_MODULE;
}
}
## 倒计时组件信息
public class MyjTimeLimitCouponServiceImpl implements MyjPageModuleDataService {
@Resource
private MyjTimeLimitCouponDependency myjTimeLimitCouponDependency;
@Override
public List<PageModuleDataVO> getCustomModuleData(PageModuleDataRequest request) {
List<QueryLevelResponse> queryLevelResponseList = this.myjTimeLimitCouponDependency.queryAllLevelsByUid(userBaseRequest);
}
@Override
public MyjModuleEnum module() {
return MyjModuleEnum.LIMIT_COUPON_MODULE;
}
}
3、具体命令接收角色(Receiver)
RenovationProgrammeDependency
MyjTimeLimitCouponDependency
4、调用者Invoker
// 遍历自定义组件Map
List<PageModuleDataVO> customResult = customMap.entrySet().stream().map(entry -> {
MyjPageModuleDataService myjPageModuleDataService = pageModuleDataServiceMap.get(entry.getKey());
PageModuleDataRequest pageModuleDataRequest = BeanCopierUtils.copy(request, PageModuleDataRequest.class);
pageModuleDataRequest.setModuleSignList(entry.getValue());
List<PageModuleDataVO> oneResult = myjPageModuleDataService.getCustomModuleData(pageModuleDataRequest);
log.info("查询自定义页面渲染数据:{},结果为:{}", JSON.toJSONString(pageModuleDataRequest),
JSON.toJSONString(oneResult));
return oneResult;
}).filter(Objects::nonNull).flatMap(Collection::stream).collect(Collectors.toList());