有没有办法共享 1 类(汽车)的对象,该对象具有“型号”、“油量”等字段,可以在 2 类(人)的其他对象之间共享。因此,Car 对象并不像特定的汽车,而更像是每个人所拥有的汽车的一般特征。那么在计算时(减少油量),特定人的车和所有人的车都会改变吗?
class Car {
int volume;
String model;
}
class Person {
String name;
Car car;
public void decreaseVolume() {
this.car.volume--;
}
}
Car car1 = new Car(100, "Ford100");
Person p1 = new Person(name, car1);
Person p2 = new Person(name, car1);
p2.decreaseVolume();
因此,当 person2 车的音量减少时,person1 车的音量不应减少?
当然!这里的问题是语言学家所说的“一词多义”:“汽车”这个词在日常语言中具有两种不同的含义。解决方案是消除需求中不同含义的歧义:
“汽车”可以对应于汽车或型号的类别(例如“雪铁龙 C4”、“蓝色 BMW Z4”)。该“汽车”可以在目录中找到,并且具有该类别的每辆车所共有的一些特征。我无法驾驶这辆车,因为它只是汽车的想法。class CarCategory {
String brand;
String model;
int maxVolume;
}
class Car {
CarCategory category; // should be mandatory at construction
String serialNumber;
int volume;
Color color;
Person owner;
}
class Person {
String name;
...
}
这里每辆车都有自己的体积,但属于同一类别的所有汽车共享相同的最大体积。
如果你想允许调整,它会变得更加复杂,并且可以有多种选择,例如重复可调属性,在调整时克隆和更改汽车类别对象等。
注意,我把人和车的关系颠倒了。一般来说,一辆车由一个人拥有(它可能是一个“有道德的人”,比如一家公司。但人可能拥有几辆车。如果你像最初的设计一样在人与车之间建立了联系,那么一个人只能拥有一辆汽车,除非你把它作为一个收藏品。但是那样的话,体积减小就不再起作用了。所以需要一些微调和实验;-)