商品管理系统是常见的Java入门实战项目,核心是通过Java的面向对象特性实现商品信息的增删改查等基础操作,其中对象封装是保证代码可维护性的关键设计。合理的对象封装可以让商品相关的属性和操作集中管理,避免代码冗余。

一、项目需求分析
我们要实现的商品管理系统需要具备以下基础功能:
- 商品信息的添加,包含商品名称、价格、库存、编号等核心属性
- 商品信息的查询,支持按商品编号查询单个商品,也支持查询所有商品列表
- 商品信息的修改,可调整商品价格、库存等信息
- 商品信息的删除,根据商品编号移除对应商品数据
二、对象封装设计
对象封装是Java面向对象的三大特性之一,我们将商品相关的属性私有化,通过公共方法对外提供访问和修改的入口,既保证数据安全,也让代码结构更清晰。首先设计商品类Product,封装商品的核心属性。
2.1 商品类封装实现
商品类的属性全部设置为private私有访问权限,通过getter和setter方法控制属性的读写,同时重写toString方法方便后续打印商品信息。
// 商品类,封装商品相关属性和操作
public class Product {
// 私有属性,外部无法直接访问
private String productId;
private String productName;
private double price;
private int stock;
// 无参构造方法
public Product() {
}
// 有参构造方法,方便快速创建商品对象
public Product(String productId, String productName, double price, int stock) {
this.productId = productId;
this.productName = productName;
this.price = price;
this.stock = stock;
}
// getter方法,用于获取属性值
public String getProductId() {
return productId;
}
public String getProductName() {
return productName;
}
public double getPrice() {
return price;
}
public int getStock() {
return stock;
}
// setter方法,用于修改属性值,可添加校验逻辑
public void setProductId(String productId) {
this.productId = productId;
}
public void setProductName(String productName) {
this.productName = productName;
}
public void setPrice(double price) {
if (price >= 0) {
this.price = price;
} else {
System.out.println("价格不能为负数");
}
}
public void setStock(int stock) {
if (stock >= 0) {
this.stock = stock;
} else {
System.out.println("库存不能为负数");
}
}
// 重写toString方法,方便打印商品信息
@Override
public String toString() {
return "商品编号:" + productId + ",商品名称:" + productName + ",价格:" + price + ",库存:" + stock;
}
}
2.2 商品管理类设计
商品管理类负责维护商品列表,实现增删改查的核心业务逻辑,内部使用一个List集合存储所有商品对象,所有操作都围绕这个集合展开。
import java.util.ArrayList;
import java.util.List;
// 商品管理类,负责商品的核心业务操作
public class ProductManager {
// 使用List存储所有商品对象,封装数据容器
private List<Product> productList;
public ProductManager() {
productList = new ArrayList<>();
}
// 添加商品
public void addProduct(Product product) {
// 校验商品编号是否已存在,避免重复添加
for (Product p : productList) {
if (p.getProductId().equals(product.getProductId())) {
System.out.println("商品编号已存在,添加失败");
return;
}
}
productList.add(product);
System.out.println("商品添加成功");
}
// 根据商品编号查询商品
public Product getProductById(String productId) {
for (Product p : productList) {
if (p.getProductId().equals(productId)) {
return p;
}
}
return null;
}
// 查询所有商品
public List<Product> getAllProducts() {
return productList;
}
// 修改商品价格
public void updateProductPrice(String productId, double newPrice) {
Product product = getProductById(productId);
if (product != null) {
product.setPrice(newPrice);
System.out.println("价格修改成功");
} else {
System.out.println("未找到对应商品,修改失败");
}
}
// 删除商品
public void deleteProduct(String productId) {
Product product = getProductById(productId);
if (product != null) {
productList.remove(product);
System.out.println("商品删除成功");
} else {
System.out.println("未找到对应商品,删除失败");
}
}
}
三、功能测试
编写测试类验证商品管理系统的各项功能是否正常,测试过程中可以看到对象封装后的代码调用逻辑非常清晰。
public class ProductTest {
public static void main(String[] args) {
// 创建商品管理对象
ProductManager manager = new ProductManager();
// 添加商品
Product p1 = new Product("P001", "笔记本电脑", 4999.0, 10);
Product p2 = new Product("P002", "无线鼠标", 99.0, 50);
manager.addProduct(p1);
manager.addProduct(p2);
// 查询所有商品
System.out.println("所有商品列表:");
for (Product p : manager.getAllProducts()) {
System.out.println(p);
}
// 按编号查询商品
System.out.println("n查询编号P001的商品:");
Product queryResult = manager.getProductById("P001");
if (queryResult != null) {
System.out.println(queryResult);
} else {
System.out.println("未找到商品");
}
// 修改商品价格
System.out.println("n修改P002商品价格:");
manager.updateProductPrice("P002", 89.0);
System.out.println(manager.getProductById("P002"));
// 删除商品
System.out.println("n删除P001商品:");
manager.deleteProduct("P001");
System.out.println("删除后所有商品列表:");
for (Product p : manager.getAllProducts()) {
System.out.println(p);
}
}
}
四、封装的优势总结
在这个商品管理系统中,对象封装带来了明显的优势:
- 数据安全:商品的价格、库存等属性通过
setter方法修改时可以添加校验逻辑,避免非法数据赋值 - 代码复用:商品类的属性和操作方法统一封装,后续扩展其他功能时可以直接复用现有代码
- 结构清晰:业务操作和数据定义分离,商品管理类只负责业务处理,商品类只负责数据存储,降低代码耦合度
通过这个简单的商品管理系统,可以直观理解Java对象封装的实际应用价值,后续还可以在此基础上扩展用户管理、订单管理等功能,进一步完善项目逻辑。