checkStock不能放入OrderService,要坚持静态决定动态的原则。下面贴一下我的设计,不足之处,请大家指正,共同讨论改进。
//订单
public class Order implements Serializable {
private String No;
private List<OrderItem> items;
//检查库存是否足够
public boolean checkStorage(){
boolean result = false;
for (Iterator itr = items.iterator(); itr.hasNext();){
OrderItem item = (OrderItem)itr.next();
result = item.IsStorageEnough();
if (!result){
break;
}
}
return result;
}
}
//订单项
public class OrderItem implements Serializable {
private String No; //序号
private Product product; //产品
private Double qty; //数量
private long deliveryPeriod; //送货周期
//检查库存是否足够
public boolean IsStorageEnough(){
ICheckStorage checker = null;
if (product.getCategory().getCode().equals("A")){
checker = new ACheckStorage();
}
else if (product.getCategory().getCode().equals("B")){
checker = new BCheckStorage();
}
else if (product.getCategory().getCode().equals("C")){
if (deliveryPeriod > 30){
checker = new ACheckStorage();
}else checker = new CCheckStorage();
}
return checker.checkStorage(product, qty);
};
}
//订单仓储
public class OrderRepository {
public void save(Order order){
}
}
//产品
public class Product implements Serializable {
private String ID;
private String code;
private ProductCategory category;
}
//产品类别
public class ProductCategory implements Serializable {
private String ID;
private String code;
}
//检查库存接口
public interface ICheckStorage {
public boolean checkStorage(Product product, Double qty);
}
public class ACheckStorage implements ICheckStorage {}
public class BCheckStorage implements ICheckStorage {}
public class CCheckStorage implements ICheckStorage {}
//订单服务
public class OrderService {
OrderRepository ordRepstry;
//下单
public void dispatchOrder(Order order){
if (order.checkStorage()){
//to do 设置订单状态为“下达”等操作
ordRepstry.save(order);
}
}
public OrderService(OrderRepository ordRepstry) {
super();
this.ordRepstry = ordRepstry;
}
}