用List實現簡單購物車類
阿新 • • 發佈:2019-01-07
import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpSession; /** * 購物車 * 現實中是用籃子或車來裝商品的 * 好比記憶體中的List * 購物車封裝對List的增刪改,查在頁面檢視list即可 * @author Administrator * */ public class ShopCar { //這裡的List必須是同一個而不是新的,有兩種方法實現 //第一種:用靜態實現,但所有物件共享這個就是產生併發,所以要用靜態的list+同步方法 //不會併發後會造成資料混亂,即資料不準確或大家的資料都一樣。 //第二種:用一個物件且只例項化一次,即單例,這樣list就只有一個,也不會再次例項化變成 //新的list //這裡採用第二種 private ShopCar(){ } //模擬現實中的籃子或車(裝商品的) private List<Item> list = new ArrayList<Item>(); //提供get方法給頁面的el表示式用 public List<Item> getList() { return list; } //提供方法給外界實只例化一次,依賴web層 public static ShopCar newInstance(HttpSession session){ ShopCar shopCar = (ShopCar)session.getAttribute("shopCar"); if(shopCar == null){ shopCar = new ShopCar(); session.setAttribute("shopCar", shopCar); } return shopCar; } public void add(Item item){ boolean isOnly = true; for(Item item2 : list){ // System.out.println(item2 == item); //這裡不能比較地址,因為兩個物件不一樣,list中的和外界的肯定 //不是同一個 if(item.getId() == item2.getId()){ //找到一樣的商品後資料加1並立即跳出整個迴圈 //設定跟新增的一樣的那個商品的數量即可 item2.setNum(item2.getNum() + 1); //第二次以上相同就不要加入到List中 isOnly = false; return; } } //是唯一的就設定數量為1 if(isOnly){ item.setNum(1); } list.add(item); } //拿到某一個數據庫id修改數量 public void update(int id,int num){ //獲取所有已有的item for(Item item : list){ //找出要修改哪一個 if(item.getId() == id){ item.setNum(num); //找到一個後馬上返回到方法上,這裡用break也可以 return; } } } public void delete(int id){ for(Item item : list){ //找出要刪除哪一個 if(item.getId() == id){ list.remove(item); return; } } } //清空購物車 public void clear(){ list.clear(); } //購買幾種商品:因為該list沒有重複的,所以可以 //通過list獲取 public int getItemKindsNum(){ return list.size(); } //購買多少件商品 public int getItemTotalNum(){ //累和所有商品 int sum = 0; for(Item item : list){ sum += item.getNum(); } return sum; } //獲取所有的總價 public float getTotalPrice(){ //累和每一件的總價 float totalPrice = 0; for(Item item : list){ totalPrice += item.getTotalPrice(); } return totalPrice; } }