2

例如。

家长:交通工具 孩子:汽车、火车、马

我想做以下

Vehicle randVehicle = new RandomeVehicleChildObject;

我在想我可以这样做:

Vehicle randVehicle;
Random r = new Random();
int x = r.nextInt();

if(x == someInt)
   randVehicle = new Car();
else if(x == otherNum)
   randVehicle = new Train();
else
   randVehicle = new Horse();

但是,如果我的班级有更多的孩子怎么办?比如15还是20?我觉得写这么多 if-else 链或开关会很痛苦。有没有办法在一行中做到这一点?

4

1 回答 1

2

我会推荐如下内容:

class VehicleFactory {
    private final List<Supplier<Vehicle>> constructors = new ArrayList<>();

    public void addConstructors(Supplier<Vehicle>... constructors) {
        this.constructors.addAll(Arrays.asList(constructors));
    }

    public Vehicle make() {
        return constructors.get(random.nextInt(constructors.size()).get();
    }
}

然后当你想开始制造车辆时:

VehicleFactory factory = new VehicleFactor();
factory.addConstructora(Car::new, Horse::new, Bike::new);
Vehicle randomVehicle = factory.make();
于 2021-03-29T03:57:05.987 回答