首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >现代 Java 技术构建宠物管理系统实操案例解析

现代 Java 技术构建宠物管理系统实操案例解析

原创
作者头像
啦啦啦191
发布2025-06-11 17:29:07
发布2025-06-11 17:29:07
1250
举报
文章被收录于专栏:Java开发Java开发

以下是结合现代Java技术(如Java 8+ Lambda、Stream API、接口默认方法等)和设计模式的实操内容,通过宠物管理系统案例展示三大特性的实际应用:

Java之封装、继承和多态(超详细)

五、现代Java技术下的实操案例:宠物管理系统

5.1 项目概述

使用现代Java技术(Java 8+)开发一个宠物管理系统,实现宠物信息管理、行为模拟和健康状态监控功能。系统将充分应用封装、继承、多态特性,并结合Stream API、Lambda表达式和接口默认方法等新特性。

5.2 封装实践:使用Record类简化数据模型

Java 14引入的Record类是一种特殊的类,用于封装不可变数据,自动生成构造方法、getter、equals()、hashCode()和toString()方法。

代码语言:java
复制
// 使用Record类封装宠物基本信息(自动实现封装)
public record PetInfo(String name, int age, String breed) {}

// 宠物健康状态类(传统封装)
public class HealthStatus {
    private boolean vaccinated;
    private double weight;
    private String lastCheckupDate;

    public HealthStatus(boolean vaccinated, double weight, String lastCheckupDate) {
        this.vaccinated = vaccinated;
        this.weight = weight;
        this.lastCheckupDate = lastCheckupDate;
    }

    // Getter和Setter方法(略)
}

5.3 继承与接口设计:多层次继承结构

设计多层次继承结构,结合抽象类和接口,实现代码复用与行为扩展。

代码语言:java
复制
// 抽象基类:动物
public abstract class Animal {
    protected final PetInfo info;
    protected HealthStatus healthStatus;

    public Animal(PetInfo info) {
        this.info = info;
    }

    // 抽象方法:所有动物必须实现叫声
    public abstract String makeSound();

    // 模板方法模式:定义喂养流程
    public final void feed() {
        System.out.println(info.name() + "正在进食...");
        afterFeed();
    }

    // 子类可扩展的钩子方法
    protected void afterFeed() {
        System.out.println(info.name() + "吃完了");
    }

    // Getter方法
    public PetInfo getInfo() {
        return info;
    }

    public HealthStatus getHealthStatus() {
        return healthStatus;
    }

    public void setHealthStatus(HealthStatus healthStatus) {
        this.healthStatus = healthStatus;
    }
}

// 接口:可训练的动物
public interface Trainable {
    // 接口默认方法(Java 8+)
    default void train() {
        System.out.println(getTrainableName() + "正在接受训练");
        performTrick();
    }

    // 抽象方法:执行特技
    void performTrick();

    // 私有方法(Java 9+)
    private String getTrainableName() {
        return this instanceof Animal ? ((Animal) this).getInfo().name() : "未知";
    }
}

// 具体子类:狗
public class Dog extends Animal implements Trainable {
    public Dog(PetInfo info) {
        super(info);
    }

    @Override
    public String makeSound() {
        return "汪汪汪";
    }

    @Override
    public void performTrick() {
        System.out.println(getInfo().name() + "学会了坐下和握手");
    }

    // 重写钩子方法
    @Override
    protected void afterFeed() {
        System.out.println(getInfo().name() + "摇尾巴表示感谢");
    }
}

// 具体子类:猫
public class Cat extends Animal {
    public Cat(PetInfo info) {
        super(info);
    }

    @Override
    public String makeSound() {
        return "喵喵喵";
    }

    // 猫特有的方法
    public void scratch() {
        System.out.println(getInfo().name() + "在抓沙发");
    }
}

5.4 多态实践:统一接口与动态行为

通过多态实现统一的宠物管理接口,处理不同类型的宠物对象。

代码语言:java
复制
// 宠物管理系统
public class PetManager {
    private final List<Animal> pets = new ArrayList<>();

    // 添加宠物(多态参数)
    public void addPet(Animal pet) {
        pets.add(pet);
    }

    // 展示所有宠物信息(多态调用)
    public void displayAllPets() {
        pets.forEach(pet -> {
            System.out.println("名字:" + pet.getInfo().name());
            System.out.println("品种:" + pet.getInfo().breed());
            System.out.println("叫声:" + pet.makeSound());
            
            // 类型检查与向下转型
            if (pet instanceof Trainable trainable) {
                trainable.train();
            }
            
            if (pet instanceof Cat cat) {
                cat.scratch();
            }
            
            System.out.println("-------------------");
        });
    }

    // 使用Stream API过滤健康的宠物
    public List<Animal> getHealthyPets() {
        return pets.stream()
                .filter(pet -> pet.getHealthStatus() != null && 
                              pet.getHealthStatus().isVaccinated() &&
                              pet.getHealthStatus().getWeight() > 0)
                .toList();
    }

    // 使用函数式接口定义自定义过滤逻辑
    public List<Animal> filterPets(Predicate<Animal> condition) {
        return pets.stream()
                .filter(condition)
                .toList();
    }
}

5.5 测试与使用示例

代码语言:java
复制
public class Main {
    public static void main(String[] args) {
        // 创建宠物
        PetInfo dogInfo = new PetInfo("旺财", 3, "金毛");
        Dog dog = new Dog(dogInfo);
        dog.setHealthStatus(new HealthStatus(true, 25.5, "2023-05-10"));

        PetInfo catInfo = new PetInfo("咪咪", 2, "英短");
        Cat cat = new Cat(catInfo);
        cat.setHealthStatus(new HealthStatus(true, 4.2, "2023-06-15"));

        // 宠物管理系统
        PetManager manager = new PetManager();
        manager.addPet(dog);
        manager.addPet(cat);

        // 展示所有宠物
        System.out.println("===== 宠物列表 =====");
        manager.displayAllPets();

        // 使用自定义过滤条件
        System.out.println("===== 年龄大于2岁的宠物 =====");
        manager.filterPets(pet -> pet.getInfo().age() > 2)
               .forEach(pet -> System.out.println(pet.getInfo().name()));
    }
}

5.6 设计模式应用

  1. 模板方法模式:在Animal类中定义喂养流程的模板,子类可以重写特定步骤。
  2. 策略模式:通过Predicate<Animal>接口实现宠物过滤策略的动态切换。
  3. 单一职责原则:每个类只负责单一功能,如PetInfo负责数据封装,PetManager负责业务逻辑。

六、最佳实践建议

6.1 封装优化

  • 使用不可变对象:优先使用finalRecord类创建不可变对象,减少并发问题。
  • 遵循LOD法则(迪米特法则):一个对象应当对其他对象有最少的了解,降低耦合度。

6.2 继承优化

  • 组合优于继承:避免过度继承导致的类爆炸问题,优先使用组合关系实现代码复用。
  • 使用接口多实现:通过实现多个接口替代多重继承,增强代码灵活性。

6.3 多态优化

  • 依赖倒置原则:高层模块不应该依赖低层模块,两者都应该依赖抽象。
  • 使用泛型增强多态性:通过泛型方法和类提高代码的通用性。

七、常见问题与解决方案

7.1 继承滥用问题

问题:过度继承导致类层次结构复杂,维护困难。

解决方案:使用组合模式或接口实现替代深度继承。

7.2 多态类型转换异常

问题:向下转型时出现ClassCastException

解决方案:使用instanceof进行类型检查,或通过Visitor模式避免类型转换。

7.3 封装破坏问题

问题:错误地将内部实现暴露给外部。

解决方案:严格控制访问权限,使用privatepackage-private修饰符。

这个实操案例结合了现代Java特性,展示了如何在真实项目中应用封装、继承和多态。你可以基于此案例进一步扩展功能,如添加更多宠物类型、实现健康数据可视化等。如果需要对特定部分进行更详细的解释或优化建议,欢迎提出具体需求。


Java,Spring Boot,MyBatis,MySQL,RESTful API,Spring Security,JWT,Redis,Spring Data JPA,Thymeleaf,AOP,Maven, 微服务,宠物管理系统,ORM



资源地址:

https://pan.quark.cn/s/14fcf913bae6


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java之封装、继承和多态(超详细)
    • 五、现代Java技术下的实操案例:宠物管理系统
      • 5.1 项目概述
      • 5.2 封装实践:使用Record类简化数据模型
      • 5.3 继承与接口设计:多层次继承结构
      • 5.4 多态实践:统一接口与动态行为
      • 5.5 测试与使用示例
      • 5.6 设计模式应用
    • 六、最佳实践建议
      • 6.1 封装优化
      • 6.2 继承优化
      • 6.3 多态优化
    • 七、常见问题与解决方案
      • 7.1 继承滥用问题
      • 7.2 多态类型转换异常
      • 7.3 封装破坏问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档