面向对象实现电商购物车需将商品、购物车、订单映射为类,通过封装、继承、多态提升可维护性;核心类包括product(只管属性与获取)、cartitem(含商品引用与数量,提供小计计算)、shoppingcart(管理条目,含增删改查与总价)及可选user类。

用面向对象思想实现电商购物车,核心是把“商品”“购物车”“订单”这些现实概念映射成类,通过封装、继承和多态让代码更清晰、易扩展、好维护。关键不是堆砌语法,而是理清职责、定义边界、合理关联。
设计核心类:明确每个类的职责
先从最小业务单元出发,定义几个基础类:
- Product(商品):只管自己是谁、多少钱、有多少库存。字段如 id、name、price、stock;方法只暴露 getXXX,不负责加购或扣库存。
- CartItem(购物车项):表示“某用户选了某商品几件”。包含 product 引用、quantity(数量),提供计算小计(price × quantity)的方法。
-
ShoppingCart(购物车):管理多个 CartItem。用 List 或 Map(比如 Map
以商品 ID 为 key)存条目;提供 add、update、remove、clear、getTotalPrice 等方法。 - User(用户):可选,如果需支持多用户隔离购物车,就让每个 User 持有一个 ShoppingCart 实例;否则购物车可独立存在。
用封装保护数据,用方法表达行为
别让外部直接改 quantity 或 price。例如 CartItem 的数量修改必须走 updateQuantity(int newQty),内部校验是否超库存;ShoppingCart 的 add 方法要检查商品是否存在、库存是否充足,并自动合并相同商品项(而不是新增一条)。
示例片段:
public void add(Product product, int quantity) {if (product.getStock() CartItem item = items.get(product.getId());
if (item != null) {
item.updateQuantity(item.getQuantity() + quantity); // 复用已有项
} else {
items.put(product.getId(), new CartItem(product, quantity));
}
}
预留扩展点:为促销、优惠券、多级分类留余地
面向对象不只是当前功能跑通,更要让后续改动不伤筋动骨。比如:
- 把 getTotalPrice() 拆成 calculateSubtotal() + applyDiscount(),后者可抽象为 DiscountStrategy 接口,将来加满减、会员价、限时折扣,只需新增实现类,不用改购物车主逻辑。
- 商品类型若分化(实物、虚拟、服务),可用 Product 抽象类或接口,让 Book、Course、Voucher 各自实现特定行为(如 Course 无物流,Voucher 有有效期)。
- 购物车持久化?加一个 ShoppingCartRepository 接口,内存版用 HashMap 实现,后期换 Redis 或数据库,只换实现类,上层不变。
避免常见设计陷阱
新手容易把所有逻辑塞进一个类,或者过度设计。注意几点:
- 不要在 Product 里写 addToCart() —— 商品不该知道自己被加到哪;也不要在 ShoppingCart 里写 sendEmail() —— 发邮件是订单服务的事。
- 数量变更、库存扣减、价格计算等逻辑,谁触发谁负责校验。购物车 add 时查库存,下单时再查一次(防并发超卖),但扣库存动作应交给 OrderService 或仓储层。
- 用 final 修饰不可变字段(如 Product.id),用 private + getter 控制访问,集合字段返回不可修改视图(Collections.unmodifiableList)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











