Java从入门到项目实战(全程视频版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

6.10 引用传递应用案例

引用传递是整个Java项目中最为核心的内容,同时也是在实际开发中最为常见的一种操作,在读者了解了对象数组的概念后,就可以基于此概念与简单Java类实现一些现实的事物关系模型。

6.10.1 类关联结构

img

在现实的开发意义上,类是可以描述一类事物共性的结构体。现在假设要描述出这样一种关系:“一个人拥有一辆汽车”,如图6-13所示,此时就需要定义两个类:Person和Car,随后通过引用的形式配置彼此的关联关系。

范例:描述人与汽车关系

img
img

图6-13 一对一引用关联

img

本程序定义了两个简单Java类:Person(描述人的信息)、Car(描述车的信息),并且在两个类的内部分别设置一个自定义的引用类型(Person类提供car成员属性、Car类提供person成员属性),用于描述两个类之间的引用联系,在主类操作时首先根据两个类的关系设置了引用关系,随后就可以根据引用关系依据某一个类对象获取相应信息。

提示:关于代码链的编写。

在本程序编写信息获取时,读者可以发现有以下的代码形式。

System.out.println(person.getCar().getInfo()); // 通过人获取汽车的信息 

实际上这就属于代码链的形式,因为Person类内部的getCar()方法返回的是Car的实例化对象(通过关联设置已经确定返回的内容不是null),所以可以继续利用此方法调用Car类中的方法,如果觉得以上的代码编写不好理解也可以把代码拆分如下。

img

相比较使用代码链而言,这类操作比较烦琐,所以读者应该尽量习惯代码链的编写方式。

6.10.2 自身关联结构

img

在进行类关联描述的过程中,除了可以关联其他类之外,也可以实现自身的关联操作,例如,现在假设一个人员会有一辆车,那么每个人员可能还有自己的子女,而子女也有可能有一辆车,这个时候就可以利用自身关联的形式描述人员后代的关系,结构如图6-14所示。

范例:实现自身关联

img
img

图6-14 自身关联

img
img

在本程序中利用对象数组(private Person children[];)描述了一个人拥有的孩子的信息,这样就在Person类的内部定义了一个自身引用,并且其结构与Person完全相同,于是孩子可以继续描述拥有的汽车或后代的信息关联。

提示:对象数组的作用。

在本程序中使用对象数组描述了一个人的后代信息,实际上读者可以发现,对象数组在整体设计中描述的是一种“多”的概念,如果没有此结构则很难准确描述出多个子女这一特点。

6.10.3 合成设计模式

img

将对象的引用关联进一步扩展就可以实现更多的结构描述,在Java中有一种合成设计模式(Composite Pattern),此设计模式的核心思想为:通过不同的类实现子结构定义,随后将其在一个父结构中整合。例如,现在要描述一台计算机组成的类结构,那么在这样的状态下就必须进行拆分,计算机分为两个部分:显示器和主机,而主机上需要设置有一系列的硬件,则可以采用以下的伪代码实现。

范例:伪代码描述合成设计思想

img

本程序给出了一个伪代码的组成结构,实际上这也属于面向对象的基本设计思想。Java中提供的引用数据类型不仅仅是描述的内存操作形式,更多的是包含了抽象与关联的设计思想。