单个对象 class1 与 class2 中的许多对象相关联

问题描述 投票:0回答:1

有没有办法共享 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 车的音量不应减少?

java class multiplicity
1个回答
0
投票

当然!这里的问题是语言学家所说的“一词多义”:“汽车”这个词在日常语言中具有两种不同的含义。解决方案是消除需求中不同含义的歧义:

“汽车”可以对应于汽车或型号的类别(例如“雪铁龙 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; ... }

这里每辆车都有自己的体积,但属于同一类别的所有汽车共享相同的最大体积。

如果你想允许调整,它会变得更加复杂,并且可以有多种选择,例如重复可调属性,在调整时克隆和更改汽车类别对象等。

注意,我把人和车的关系颠倒了。一般来说,一辆车由一个人拥有(它可能是一个“有道德的人”,比如一家公司。但人可能拥有几辆车。如果你像最初的设计一样在人与车之间建立了联系,那么一个人只能拥有一辆汽车,除非你把它作为一个收藏品。但是那样的话,体积减小就不再起作用了。所以需要一些微调和实验;-)

© www.soinside.com 2019 - 2024. All rights reserved.