1. 程式人生 > >用List實現簡單購物車類

用List實現簡單購物車類

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;
	}
}