小弟想做个购物网,可是在购物车的结构设计上碰到了麻烦。望各位大侠相助!
public class ShopCart {
private HashMap<String, Product> hashMap;\\\\\\\\\\\\商品编号,商品类的hashMap
public HashMap<String, Product> getHashMap() {
return hashMap;
} public void setHashMap(HashMap<String, Product> hashMap) {
this.hashMap = hashMap;
} @SuppressWarnings("unchecked")
public ShopCart(){
hashMap = new HashMap();
}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\其他代码省略。在购物网中 ,用户如果要购买的商品数量大于1以上,那使用hashMap并没有办法表示,如果在Product类中增加一个数量的属性那缺陷就太大了,最好是有什么数据结构能直接表示的?小弟觉得在ShopCart里面弄个内部类比较好。不知道做过购物网的朋友是怎么设计它的?
public class ShopCart {
private HashMap<String, Product> hashMap;\\\\\\\\\\\\商品编号,商品类的hashMap
public HashMap<String, Product> getHashMap() {
return hashMap;
} public void setHashMap(HashMap<String, Product> hashMap) {
this.hashMap = hashMap;
} @SuppressWarnings("unchecked")
public ShopCart(){
hashMap = new HashMap();
}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\其他代码省略。在购物网中 ,用户如果要购买的商品数量大于1以上,那使用hashMap并没有办法表示,如果在Product类中增加一个数量的属性那缺陷就太大了,最好是有什么数据结构能直接表示的?小弟觉得在ShopCart里面弄个内部类比较好。不知道做过购物网的朋友是怎么设计它的?
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;import com.shopping.cart.Cart;
import com.shopping.pojo.ProductItemVO;
import com.shopping.pojo.ProductVO;
//购物车
public class CartImpl implements Cart {
private Map<String, ProductItemVO> cart = Collections.synchronizedMap(new HashMap<String, ProductItemVO>()); public void addItem(ProductVO product) {
String key = product.getPpid();
ProductItemVO item = cart.get(key);
if (item == null){
item = new ProductItemVO();
item.setProduct(product);
item.setQuantity(1);
cart.put(key, item);
}else{
item.incrementQuantity();
}
}
public void incrementQuantity(String key){
ProductItemVO item = cart.get(key);
item.incrementQuantity();
}
public void setQuantity(String key, int quantity){
ProductItemVO item = cart.get(key);
item.setQuantity(quantity);
} public void clear() {
cart.clear();
} public void removeItem(String index) {
cart.remove(index);
}
public double getTotalMoney(){
double totalMoney = 0.0;
for (Iterator<ProductItemVO> iter = cart.values().iterator(); iter.hasNext(); ){
ProductItemVO item = iter.next();
totalMoney = totalMoney + item.getTotalPrice();
}
return totalMoney;
}
public Map<String, ProductItemVO> getCart() {
return cart;
} public int getAmount() {
// TODO Auto-generated method stub
int amount = 0;
for (Iterator<ProductItemVO> iter = cart.values().iterator(); iter.hasNext(); ){
ProductItemVO item = iter.next();
amount = amount + item.getQuantity();
}
return amount;
} public boolean hasItem(String key) {
// TODO Auto-generated method stub
return cart.containsKey(key);
}
}
//商品枚举
package com.shopping.pojo;import java.io.Serializable;public class ProductItemVO implements Serializable{
/**
* 此商品枚举中的商品
*/
private ProductVO product;
/**
* 此商品枚举中的相应商品的数量
*/
private int quantity;
public ProductVO getProduct() {
return product;
}
public void setProduct(ProductVO product) {
this.product = product;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
/**
* 商品数量的增加
*/
public void incrementQuantity(){
quantity++;
}
/**
* 商品价格
* @return
*/
public double getTotalPrice() {
if (product != null) {
return product.getPrice() * quantity;
}else {
return 0;
}
}
}
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;public class ShopCart { private Map items = new HashMap();
public void add(OrderLine line) {
Integer product_id = line.getProduct().getId();
OrderLine orderLine = (OrderLine) items.get(product_id);
if (orderLine == null) {
items.put(product_id, line);
} else {
orderLine.setAmount(orderLine.getAmount() + line.getAmount());
items.put(product_id, orderLine);
}
} public void remove(OrderLine line) {
Integer product_id = line.getProduct().getId();
items.remove(product_id);
} public void remove(Integer id) {
items.remove(id);
}
public void modify(OrderLine line) {
Integer product_id = line.getProduct().getId();
items.put(product_id, line);
} public double getTotal() {
double total = 0;
Set set = items.keySet();
Iterator it = set.iterator();
while (it.hasNext()) {
Integer id = (Integer) it.next();
OrderLine line = (OrderLine) items.get(id);
total += line.getProduct().getBasePrice() * line.getAmount();
}
return total;
}
public int getCount() {
int count = 0;
Set set = items.keySet();
Iterator it = set.iterator();
while (it.hasNext()) {
Integer id = (Integer) it.next();
OrderLine line = (OrderLine) items.get(id);
count += line.getAmount();
}
return count;
}
public int getSize() {
return items.size();
}
public Order getOrder() {
Order order = new Order();
Set set = new HashSet();
Collection list = items.values();
set.addAll(list);
order.setOrderlines(set);
return order;
}
public void clearCart() {
items.clear();
} public Map getItems() {
return items;
} public void setItems(Map items) {
this.items = items;
}}