ShoppingCart 类
-----------------------------------------------------------------------------------------------------------
import java.util.*;
public class ShoppingCart {
HashMap items = null;
int numberOfItems = 0;
public ShoppingCart() {
items = new HashMap();
}
public synchronized void add(String mid, Merchandise m) {
if(items.containsKey(mid)) {
ShoppingCartItem scitem = (ShoppingCartItem) items.get(mid);
scitem.incrementQuantity();
} else {
ShoppingCartItem newItem = new ShoppingCartItem(m);
items.put(mid, newItem);
}
numberOfItems++;
}
public synchronized void remove(String bookId) {
if(items.containsKey(bookId)) {
ShoppingCartItem scitem = (ShoppingCartItem) items.get(bookId);
scitem.decrementQuantity();
if(scitem.getQuantity() <= 0)
items.remove(bookId);
numberOfItems--;
}
}
public synchronized Collection getItems() {
return items.values();
}
protected void finalize() throws Throwable {
items.clear();
}
public synchronized int getNumberOfItems() {
return numberOfItems;
}
public synchronized double getTotal() {
double amount = 0.0;
for(Iterator i = getItems().iterator(); i.hasNext(); ) {
ShoppingCartItem item = (ShoppingCartItem) i.next();
Merchandise merch = (Merchandise) item.getItem();
amount += item.getQuantity() * merch.getPrice();
}
return roundOff(amount);
}
private double roundOff(double x) {
long val = Math.round(x*100); // cents
return val/100.0;
}
public synchronized void clear() {
items.clear();
numberOfItems = 0;
}
}
--------------------------------------------------------------------------------------------------------
ShoppingCartItem 类
--------------------------------------------------------------------------------------------------------
public class ShoppingCartItem {
Object item;
int quantity;
public ShoppingCartItem(Object anItem) {
item = anItem;
quantity = 1;
}
public void incrementQuantity() {
quantity++;
}
public void decrementQuantity() {
quantity--;
}
public Object getItem() {
return item;
}
public int getQuantity() {
return quantity;
}
}