对所有实例使用单个工厂方法和通用构造函数,然后填充实例会更好吗?还是应该使用多个工厂方法和构造函数?每种方法的优点是什么?
例如(选项 #1):
VehicleFactory {
Vehicle createVehicle(int serialNo);
}
// assuming that Car and Plane are of type Vehicle:
Car car = (Car)VehicleFactory.createVehicle(serialNo1);
car.setCarSpecificField1(...);
car.setCarSpecificField2(...);
Plane plane = (Plane)VehicleFactory.createVehicle(serialNo2);
plane.setPlaneSpecificField1(...);
plane.setPlaneSpecificField2(...);
在这里,Plane 和 Car 将有一个简单的通用构造函数,但需要多个 setter 和 getter。调用者必须填充实例。
或者(选项#2):
VehicleFactory {
Car createCar(int serialNo, CarSpecificField1 field1, CarSpecificField2 field2, ...)
Plane createPlane(int serialNo, PlaneSpecificField1 field1, PlaneSpecificField2, ...)
}
Car car = VehicleFactory.createCar(serialNo1, carSpecificField1, ...);
Plane plane = VehicleFactory.createPlane(serialNo2, planeSpecificField1, ...);
在这里,我们不需要 getter 和 setter,但需要为每个实例使用不同的构造函数。