一起来看引用与现实的邂逅 | 带你学《Java面向对象编程》之二十二

简介: 本节通过三则分析为读者介绍了类关联结构、类自身关联等逻辑与合成设计模式的概念,带读者去理解类的灵活性。

上一篇:领略Java艺术之万物皆“数组” | 带你学《Java面向对象编程》之二十一
【本节目标】
通过阅读本节内容,你将初步掌握由现实世界物物相联而体现到Java世界中的类之间与类本身相互关联的实现方法,并通过合理化拆分类内元素达到高可用的要求。

引用传递是整个Java开发设计过程之中最为重要的技术组成,引用传递也与实际的生活密切相关。

引用应用分析一:(类关联结构)

假设生活品质比较好的人可以有一辆汽车,当然,一些生活较差的人是没有汽车的,只能依靠步行。要求可以通过面向对象的设计来解决实现以上的关系转换。

image.png
图一 人与车之间的关系图

class Car {
    private String name ;
    private double price ;
    private Person person ;    //车应该属于一个人
    public Car(String name , double price) {
        this.name = name ;
        this.price = price ;
    }
    public void setPerson(Person person) {
        this.person = person ;
    }
    public Person getPerson {
        return this.person ;
    }
    public String getInfo() {
        return “汽车品牌型号:” + this.name + “、汽车价值:” + this.price ;
    }
}
class Person {
    private String name ;
    private int age ;
    private Car car ;   //一个人有一辆车
    public Person(String name ,int age) {
        this.name = name ;
        this.age = age ;
    }
    public void setCar(Car car) {
        this.car = car ;
    }
    public Car getCar {
        return this.car ;
    }
    public String getInfo() {
         return “姓名:” + this.name + “、年龄:” + this.age ;
    }
}
public class ArrayDemo {
     public static void main (String args[ ]) {
          //第一步:声明对象并且设置彼此关系
         Person person = new Person(“林强”, 29) ;
         Car car = new Car(“宾利”,8000000.00) ;
         person.setCar(car) ;     //一个人有一辆车
         car.setPerson(person) ;   //一辆车属于一个人
         //第二步:根据关系获取数据
         System.out.println(person.getCar().getInfo()) ;    //代码链
         System.out.println(car.getPerson().getInfo()) ;
     }    
}

image.png
图二 执行结果图

本次所操作的两个类型:Person、Car都是自定义类型,但是Person和Car都可以明确的描述出某一类群体,现在是针对于群体关系做出的一种设置。

引用应用分析二:(自身关联)

现在已经确定好人与车的关系,但是现在可以进一步进行该操作的完善,例如:一个人有孩子,孩子也可以在成年之后有车。

image.png
图三 人、后代与车的关系

class Car {
    private String name ;
    private double price ;
    private Person person ;    //车应该属于一个人
    public Car(String name , double price) {
        this.name = name ;
        this.price = price ;
    }
    public void setPerson(Person person) {
        this.person = person ;
    }
    public Person getPerson {
        return this.person ;
    }
    public String getInfo() {
        return “汽车品牌型号:” + this.name + “、汽车价值:” + this.price ;
    }
}
class Person {
    private String name ;
    private int age ;
    private Car car ;   //一个人有一辆车
    private Person children [] ;    //一个人有多个孩子
    public Person(String name ,int age) {
       this.name = name ;
       this.age = age ;
    }
    public void setChildren(Person children []) {
       this.children = children ;
    }
    public Person [] getChildren() {
       return this.children ;
    }
    public void setCar(Car car) {
       this.car = car ;
    }
    public Car getCar {
       return this.car ;
    }
    public String getInfo() {
       return “姓名:” + this.name + “、年龄:” + this.age ;
    }
}
public class ArrayDemo {
     public static void main (String args[ ]) {
          //第一步:声明对象并且设置彼此关系
         Person person = new Person(“吴硕”, 29) ;
         Person childA = new Person(“林强”,18) ;
         Person childB = new Person(“郭仁义”,19) ;
         childA.setCar(new Car(“BMW X1” ,300000.00)) ;     //匿名对象
         childB.setCar(new Car(“法拉利” ,1500000.00)) ;     //匿名对象
         Person.setChildren(new Person [] {childA ,childB}) ;   //一个人有多个孩子
         Car car = new Car(“宾利”,8000000.00) ;
         person.setCar(car) ;     //一个人有一辆车
         car.setPerson(person) ;   //一辆车属于一个人
         //第二步:根据关系获取数据
         System.out.println(person.getCar().getInfo()) ;    //代码链
         System.out.println(car.getPerson().getInfo()) ;
         //根据人找到所有的孩子以及孩子对应的车
         for (int x = 0 ; x < person.getChildren().length ; x ++) {
            System.out.println(“\t|-” + person.getChildren ()[x].getInfo()) ;
            System.out.println(“\t\t|-” + person.getChildren 
()[x].getCar.getInfo()) ;
         }
     }    
}

image.png
图四 执行结果二

这些关系的匹配都是通过引用数据类型的关联来完成的。

引用应用分析三(合成设计模式)

假设现在要求定义出一种可以描述电脑组成的类,那么在这样的状态下就必须进行拆分,电脑分为两部分:显示器和主机;而主机上需要设置有一系列的硬件。

class 电脑{
   private 显示器 对象数组 [] ;
   private 主机 对象;
}
class 显示器{}
class 主机{
   private 主板 对象 ;
   private 鼠标 对象 ;
   private 键盘 对象 ;
}
class 主板{
   private 内存 对象数组 [] ;
   private CPU 对象数组 [] ;
   private 显卡 对象
   private 硬盘 对象数组 [] ;
}
class 键盘{}
class 鼠标{}
class 内存{}
class CPU{}
class 显卡{}
class 硬盘{}

任何的人类的科技产品都可以进行拆分,而后进行重新组合的,所以这样的设计在Java中被称为合成设计模式。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:来自现实世界的邀请:映射转换 | 带你学《Java面向对象编程》之二十三
更多Java面向对象编程文章查看此处

相关文章
|
1月前
|
设计模式 安全 Java
面向对象编程的精髓:Java设计模式 - 原型模式(Prototype)完全参考手册
【4月更文挑战第7天】原型模式是OOP中的创建型设计模式,用于通过复制现有实例创建新实例,尤其适用于创建成本高或依赖其他对象的情况。它包括Prototype接口、ConcretePrototype实现和Client客户端角色。优点是性能优化、避免子类化和动态增加产品族。实现包括定义原型接口、实现具体原型和客户端调用克隆方法。最佳实践涉及确保克隆正确性、选择深拷贝或浅拷贝及考虑线程安全。但需注意克隆方法管理、性能开销和循环引用等问题。在Java中,实现Cloneable接口和覆盖clone方法可实现原型模式。
|
1月前
|
安全 Java 数据安全/隐私保护
|
4天前
|
Java
04|零基础玩转面向对象编程:Java OOP
04|零基础玩转面向对象编程:Java OOP
5 0
|
4天前
|
Java
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
|
6天前
|
存储 Java 程序员
Java面向对象编程的基础概念解析
Java面向对象编程的基础概念解析
14 0
|
6天前
|
Java
Java一分钟之-类与对象:面向对象编程入门
【5月更文挑战第8天】本文为Java面向对象编程的入门指南,介绍了类与对象的基础概念、常见问题及规避策略。文章通过代码示例展示了如何定义类,包括访问修饰符的适当使用、构造器的设计以及方法的封装。同时,讨论了对象创建与使用时可能遇到的内存泄漏、空指针异常和数据不一致等问题,并提供了相应的解决建议。学习OOP需注重理论与实践相结合,不断编写和优化代码。
27 1
|
20天前
|
Java
Java从入门到精通:1.1.2深入理解Java的面向对象编程概念
Java从入门到精通:1.1.2深入理解Java的面向对象编程概念
|
22天前
|
Java
Java基础之对象的引用
Java基础之对象的引用
6 0
|
1月前
|
Java Scala C#
Java 17 新特性揭秘:密封类的华丽登场,面向对象编程再进化
Java 17 新特性揭秘:密封类的华丽登场,面向对象编程再进化
26 0
|
2月前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
95 3