购物车的设计思想如下:
- 购物车中放入的信息是用户在完成生成订单前添加的商品信息,一般 购物商城中 对于购物车中的信息 大多数是存放在会话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); }
以上只是简单的给出了 购物车商品信息的添加 其更新功能此处就不加 说明了