開發與維運

一起来看引用与现实的邂逅 | 带你学《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面向对象编程文章查看此处

Leave a Reply

Your email address will not be published. Required fields are marked *