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;
}
}
用List实现简单购物车类
最新推荐文章于 2022-08-12 08:45:47 发布