1.继承是java的三大特性之一,继承可以形容成父子关系,继承是单一性的,指一个类只有一个父类 .继承中子类可以重写父类方法,
重写的三不变: 方法名不变,方法入参类型不变,方法的返回值类型不变
(注意点) 方法的重载: 在同一个类中,方法名相同 方法参数个数不同,类型不同
2.多态也是java的三大特性之一,一个对象多种形态,一个类有多个子类,每个子类展现不同的特性
代码实现
//父类接口类
public interface OrderCostHandleService {
/**
* 判断是否需要执行doHandle方法
*
* @param feeTicketModel
* @return
*/
boolean canDo(FeeTicketModel feeTicketModel);
/**
*具体的业务方法
* @param orderDo
* @param orderBaseInfoVo
* @param feeTicketModel
*/
void doHandle(OrderDo orderDo,
OrderBaseInfoVo orderBaseInfoVo,
FeeTicketModel feeTicketModel);
}
// doHandle方法重写,判断子类实体类是否需要执行
public abstract class AbstractOrderCostHandleService implements OrderCostHandleService {
@Autowired
protected CommonDaoService commonDaoService;
@Autowired
protected OrderCommonService orderCommonService;
/**
* 对具体的费用类型数据库操作
*
* @param orderDo
* @param orderBaseInfoVo
* @param feeTicketModel
*/
@Override
public void doHandle(OrderDo orderDo,
OrderBaseInfoVo orderBaseInfoVo,
FeeTicketModel feeTicketModel) {
if (feeTicketModel.getTotalFee().getValue().compareTo(BigDecimal.ZERO) == 0) {
return;
}
deal(orderDo, orderBaseInfoVo, feeTicketModel);
}
/**
* 处理
*
* @param orderDo
* @param orderBaseInfoVo
* @param feeTicketModel
*/
protected abstract void deal(OrderDo orderDo,
OrderBaseInfoVo orderBaseInfoVo,
FeeTicketModel feeTicketModel);
}
//子类实体类
@Service("OrderCostBalanceService")
public class OrderCostBalanceServiceImpl extends AbstractOrderCostHandleService {
/**
* 判断是否需要执行doHandle方法
*
* @param feeTicketModel
* @return
*/
@Override
public boolean canDo(FeeTicketModel feeTicketModel) {
return feeTicketModel.getFeeType() == FeeTicketEnum.common_point_fee;
}
/**
* 处理
*
* @param orderDo
* @param orderBaseInfoVo
* @param feeTicketModel
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void deal(OrderDo orderDo,
OrderBaseInfoVo orderBaseInfoVo,
FeeTicketModel feeTicketModel) {
// 获取通用对象
CgcUserFund cgcUserFund = commonDaoService.get(CgcUserFund.class, orderDo.getUserId());
}
}
//子类实体类
@Service("orderCostCouponService")
public class OrderCostCouponServiceImpl extends AbstractOrderCostHandleService {
/**
* 判断是否需要执行doHandle方法
*
* @param feeTicketModel
* @return
*/
@Override
public boolean canDo(FeeTicketModel feeTicketModel) {
return feeTicketModel.getFeeType() == FeeTicketEnum.coupons_fee;
}
/**
* 处理
*
* @param orderDo
* @param orderBaseInfoVo
* @param feeTicketModel
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void deal(OrderDo orderDo,
OrderBaseInfoVo orderBaseInfoVo,
FeeTicketModel feeTicketModel) {
//子/母订单设置优惠总额
CgcOrderBasicInfo cgcOrderBasicInfo = orderBaseInfoVo.getCgcOrderBasicInfo();
cgcOrderBasicInfo.setDiscountPrice(feeTicketModel.getTotalFee().getValue());
CgcOrderSubBasic cgcOrderSubBasic = orderBaseInfoVo.getCgcOrderSubBasic();
cgcOrderSubBasic.setDiscountPrice(feeTicketModel.getTotalFee().getValue());
//设置orderlist商品中每个商品的优惠平摊额
updateGoodsDiscount(orderBaseInfoVo.getCgcOrderGoodsList(), feeTicketModel);
//更新user-coupon表的信息
updateUserCoupon(feeTicketModel, cgcOrderBasicInfo, cgcOrderSubBasic);
}
}
/**
* 获取处理器
*
* @return
*/
private List getOrderCostHandleServices() {
if (this.orderCostHandleServices == null) {
synchronized (this) {
if (this.orderCostHandleServices == null) {
Map<> map=ApplicationContext.getBeanOfType(OrderCostHandleService.class);
// this.orderCostHandleServices = ApplicationContext.getBeanList(OrderCostHandleService.class);
}
}
}
return this.orderCostHandleServices;
}