目录
知识总览:
- 类关联结构
- 自身关联结构
- 合成设计模式(GOF链接预放置)
引用传递是整个java项目中最为核心的内容,同时也是在实际开发中最常见的一种操作。
1.类关联结构
代码展示:
描述人类与汽车类的关系:
声明汽车类
public class Car {
private String name;
private double price;
private Person person; //车属于的人(车与人产生关系)
public Car(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public String getInfo(){
return "汽车品牌型号"+name+"、汽车价值"+price;
}
}
声明人类:
public class Person {
private String name;
private int age;
private Car car; //人拥有的车,如果没有车则为null
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
public String getInfo(){
return "姓名"+name+"、年龄"+age;
}
}
测试类:
public class JavaDemo {
public static void main(String[] args) {
//实例化对象
Person person=new Person("张三",29);
Car car = new Car("兰博基尼",5000000.00);
//设置对象的关系
person.setCar(car);
car.setPerson(person);
//根据关系来获取数据,以此将两个类联系起来
System.out.println(person.getCar().getInfo());//通过人获取该人拥有汽车的信息
System.out.println(car.getPerson().getInfo());//通过该汽车获取车主信息
}
}
自身关联结构
该类不仅可以与上述其他类关联还能与该类自身相关联
以人类为例:
代码:
声明汽车类
public class Car {
private String name;
private double price;
private Person person; //车属于的人(车与人产生关系)
public Car(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public String getInfo(){
return "汽车品牌型号"+name+"、汽车价值"+price;
}
}
声明人类:
public class Person {
private String name;
private int age;
private Car car; //人拥有的车,如果没有车则为null
private Person childer[];//与自身类产生相同性质的自身引用关联类数组
//Person类与自身类型相关联的setter和getter方法
public Person[] getChilder() {
return childer;
}
public void setChilder(Person[] childer) {
this.childer = childer;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
public String getInfo(){
return "姓名"+name+"、年龄"+age;
}
}
测试类:
public class JavaDemo {
public static void main(String[] args) {
//实例化对象
Person person=new Person("张三",29);
Car car = new Car("兰博基尼",5000000.00);
//设置对象的关系
person.setCar(car);
car.setPerson(person);
//根据关系来获取数据,以此将两个类联系起来
System.out.println(person.getCar().getInfo());//通过人获取该人拥有汽车的信息
System.out.println(car.getPerson().getInfo());//通过该汽车获取车主信息
//下面是产生与自身相关联的代码:
Person childer01=new Person("张三的儿子",22);
Person childer02=new Person("张三的女儿",18);
person.setChilder(new Person[]{childer01,childer02});
childer01.setCar( new Car("法拉利",4000000));
childer02.setCar(new Car("奥迪",4000000));
//根据关系获取数据
for(int i=0;i<person.getChilder().length;i++){
System.out.println(person.getChilder()[i].getInfo());
System.out.println(person.getChilder()[i].getCar().getInfo());
}
}
}
输出结果:
总结:
对象数组的作用:
在本程序中使用对象数组描述了一个人的后代信息,实际上可以发现,对象数组在整体设计中描述的是一种“多”的概念,如果没有此结构则很难描述出多个子女这一特点。
个人觉得哈,对象数组的位置不一定就写在自身类中
合成设计模式
前面的引用传递应用案例就是合成设计模式的前身
此设计模式的核心思想为:通过不同的类实现子结构定义,随后将其在一个父结构中整合。(该思想在后面的学习中应用广泛)
例如,现在要描述一台计算机组成的类结构,那么在这样的状态下就必须进行拆分,计算机分为两个部分:显示器和主机,而主机上需要设置有一系列的硬件,则可以采用以下的伪代码实现:
范例:伪代码描述合成设计思想:
class 计算机{ //【父结构】描述计算机组成
private 显示器 对象数组[]; //一台计算机可以连接多个显示器
private 主机 对象; //一台计算机只允许有一台主机
}
class 显示器{} //【子结构】
class 主机{ //【子结构】
private 主板 对象;
private 鼠标 对象;
private 键盘 对象;
}
calss 主板{ //【子结构】
private 内存 对象数组[];
private CPU 对象数组[];
private 显卡 对象;
private 硬盘 对象数组[];
}
class 键盘{} //【子结构】
class 鼠标{} //【子结构】
class 内存{} //【子结构】
class CPU{} //【子结构】
class 显卡{} //【子结构】
class 硬盘{} //【子结构】