购物车的设计思想如下:
- 购物车中放入的信息是用户在完成生成订单前添加的商品信息,一般 购物商城中 对于购物车中的信息 大多数是存放在会话session中 并未牵扯到数据库
- 购物车中显示的是一条或多条商品条目,而商品条目中一般包括 :商品的基本信息 (商品名称 商品的单价),购买数量 ,每个商品条目的价钱小计,最后 往往有购物车中所有商品的价格总计。
- 经过上面的分析 我们可以定义一个购物车条目类 即CartItem 在该类即对购物车中每个商品条目的封装 实现了商品信息,购买数量,价格总计的定义。其中totalPrice为只读属性 因为该属性值可以通过内部计算获取
public class CartItem {
private FoodInfo finfo;
private int iCount;
private float totalPrice;
public FoodInfo getFinfo() {
return finfo;
}
public void setFinfo(FoodInfo finfo) {
this.finfo = finfo;
}
public int getiCount() {
return iCount;
}
public void setiCount(int iCount) {
this.iCount = iCount;
}
public float getTotalPrice() {
this.totalPrice=this.iCount*this.finfo.getFood_price();
return totalPrice;
}
public CartItem(FoodInfo finfo, int iCount) {
super();
this.finfo = finfo;
this.iCount = iCount;
}
}
因为 本次购物车 并未牵扯到数据库 所以 在购物车的实现我们直接在业务逻辑层中来完成。cartAdd方法用来实现商品条目添加,首先判断购物车中是否存在该商品 如果有更新即可否则加入cartMap中;getCartMap()方法用来读取购物车中信息;cartUpd()方法用来更新修改购物车中的信息;cartDel用来删除购物车中的某一个商品;cartClear()用来实现 清空购物车
public class CartBizImpl implements CartBiz {
//声明定义Map对象 cartMap用来存放 商品条目cartItem。其中key为商品编号 value为cartItem
private HashMap<Integer, CartItem> cartMap=new HashMap<Integer, CartItem>();
public boolean cartAdd(CartItem ci) {
if(cartMap.containsKey(ci.getFinfo().getFood_id())){
CartItem cOld=cartMap.get(ci.getFinfo().getFood_id());
cOld.setiCount(ci.getiCount()+cOld.getiCount());
}
else{
cartMap.put(ci.getFinfo().getFood_id(), ci);
}
return true;
}
public HashMap<Integer, CartItem> getCartMap() {
return this.cartMap;
}
public boolean cartUpd(CartItem ci) {
cartMap.put(ci.getFinfo().getFood_id(), ci);
return true;
}
public boolean cartDel(int foodid) {
cartMap.remove(foodid);
return true;
}
public boolean cartClear() {
cartMap.clear();
return true;
}
public CartItem get(int foodId){
return cartMap.get(foodId);
}
}
在购物车的servlet中 来具体实现购物车的功能,因为购物车业务类在每次声明创建之后 完成了本次servlet它的生命周期 即结束 所以 我们将其放入session中 已达到 该业务类 能够在 整个会话期间使用
CartItem ci=new CartItem(fi,iCount);
boolean flag=false;
if(session.getAttribute("shopCart")==null){
CartBiz cb=new CartBizImpl();
flag=cb.cartAdd(ci);
session.setAttribute("shopCart", cb);
}
else{
CartBiz cb=(CartBiz)session.getAttribute("shopCart");
flag=cb.cartAdd(ci);
session.setAttribute("shopCart", cb);
}
以上只是简单的给出了 购物车商品信息的添加 其更新功能此处就不加 说明了