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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值