如何在Java公交票务系统代码中应用OOP封装特性
Java公交票务系统引入封装的实现方案
1. 优先确定需要封装的核心业务类
公交票务系统中常见的可封装类包括Ticket(车票)、BusRoute(公交线路)、Passenger(乘客)三类,你可以先从现有代码中抽取出这几类的属性,优先做封装改造。
2. 封装的标准实现逻辑
封装的核心规则是类的属性私有化,仅通过公开方法对外提供访问/修改入口,你可以直接在对应的业务类中替换原有逻辑即可,不需要额外找特殊插入位置。
以下是车票类的封装示例:
public class Ticket { // 第一步:所有属性用private修饰,禁止外部直接访问修改 private String ticketId; private String routeName; private double price; private boolean isUsed; private long buyTime; // 第二步:提供公开构造方法,初始化时自动做参数校验,避免生成非法对象 public Ticket(String ticketId, String routeName, double price) { this.ticketId = ticketId; this.routeName = routeName; if (price < 0) { throw new IllegalArgumentException("票价不能为负数"); } this.price = price; this.isUsed = false; this.buyTime = System.currentTimeMillis(); } // 第三步:仅对外提供必要的get/set方法,生成后不可修改的属性不要加set方法 public String getTicketId() { return ticketId; } public String getRouteName() { return routeName; } public double getPrice() { return price; } public boolean isUsed() { return isUsed; } public long getBuyTime() { return buyTime; } // 车票状态变更逻辑封装在类内部,外部无需关心实现细节直接调用即可 public void useTicket() { if (this.isUsed) { throw new IllegalStateException("该车票已使用,不可重复检票"); } this.isUsed = true; } }
3. 原有业务代码的适配修改
原来你可能写的是Ticket t = new Ticket(); t.price = -5;这类直接操作属性的代码,现在替换为调用封装好的方法即可:
public class TicketDemo { public static void main(String[] args) { // 初始化时自动校验票价合法性 Ticket ticket = new Ticket("T2024001", "12路环线", 2.0); // 检票直接调用封装好的方法,内部自动做重复使用校验 ticket.useTicket(); System.out.println("车票使用状态:" + ticket.isUsed()); } }
4. 封装逻辑的插入位置说明
- 所有业务类的属性定义部分,直接把原来的
public修饰符改成private - 在类内部补充对应属性的get/set方法和业务逻辑方法,生成后不可修改的属性不要提供set方法(比如车票ID、购买时间这类字段)
- 把原来散在各处的属性校验、状态修改逻辑都挪到对应类的内部方法中,外部只需要调用方法即可完成操作
注意:不需要一次性改造所有代码,可以先从核心的车票、线路类开始改造,逐步替换原有逻辑即可。
内容的提问来源于stack exchange,提问作者Ruben Sandique
相关产品推荐
相关产品推荐

