该案例使用模板方法模式,整个案例使用伪代码进行讲解。
上下文返回的类(实际业务类,需要返回的信息):
public class Context{
private Item item; //商品信息,名称,价格,数量
private Comment comment; //名称,内容
private Seller seller; //销售信息 //总数量,销售数量
private Shop shop; //店铺信息 //店铺名称
}
抽象模板类:AbstractLoadDataProcessor继承RecursiveAction,重写compute方法;并实现ILoadDataProcessor接口(接口有load接口),重写load方法,调用子类的实现
//类属性
protect Context context;
public Context getContext(){
this.join();
return context;
}
评论服务:CommentService 继承AbstractLoadDataProcessor
商品信息:ItemService继承AbstractLoadDataProcessor
销售信息服务:SellerService继承AbstractLoadDataProcessor
店铺信息服务:ShopService继承AbstractLoadDataProcessor
聚合服务:ItemTaskForkJoinDataProcessor 继承AbstractLoadDataProcessor ,类属性如下:
private List<AbstractLoadDataProcessor> taskDataProcessor=new ArrayList();
taskDataProcessor.add(CommentService实例);
taskDataProcessor.add(ItemService实例);
taskDataProcessor.add(ComplexTradeTaskService实例);
public load (Context context){
this.taskDataProcessor.forEach(loadDataProcessor->{
loadDataProcessor.setContext(context);
loadDataProcessor.fork();
})
}
public Context getContext(){
this.taskDataProcessor.forEach(ForkJoinTask::join);
return super.getContext();
}
销售和店铺信息聚合类:ComplexTradeTaskService
private List<AbstractLoadDataProcessor> taskDataProcessor=new ArrayList();
taskDataProcessor.add(SellerService实例);
taskDataProcessor.add(ShopService实例);
public load (Context context){
this.taskDataProcessor.forEach(loadDataProcessor->{
loadDataProcessor.setContext(context);
loadDataProcessor.fork();
})
}
public Context getContext(){
this.taskDataProcessor.forEach(ForkJoinTask::join);
return super.getContext();
}
main方法使用:
//得到聚合服务实列
Context context=new Context();
ItemTaskForkJoinDataProcessor itemTaskForkJoinDataProcessor=new ItemTaskForkJoinDataProcessor();
itemTaskForkJoinDataProcessor.setContext(context);
ForkJoinPool forkJoinPool=new ForkJoinPool();
forkJoinPool.submit(itemTaskForkJoinDataProcessor);
return itemTaskForkJoinDataProcessor.getContext();