如何进行火车组合 - 类 的组合
How to do train composition - compositon of classes
我目前正在为大学做一个火车模拟项目。
这是我的 class 层次结构:
RollingStock
Coach
FreightCoach
PassengerCoach
SpecialCoach
Engine
DieselEngine
ElectricEngine
SteamEngine
Trainset
我的问题:
- 每个教练都有一个唯一的 ID。但是,Engines 和 Trainsets 共享它们的 ID-Space ("series-name")。 "Name" 由 RollingStock 继承,Trainset 和 Engine 都具有属性 "series".
我创建了一个 class "SharedIdSpace" 来实现此功能。但是我不太确定如何很好地解决这个问题(TreeMap,...,?)。
现在,我的主要问题是我必须实现以下功能:
机车车辆可以组合成列车,组合时必须遵守以下限制条件:
- 必须始终至少设置一个 locomotive/train 在有效列车的开头或结尾。
- 组合时,必须始终考虑机车车辆在所需组合点是否具有合适的联轴器。
- 正在组合的机车车辆尚未在另一列火车上使用。
[...]"
我该如何实施?恐怕我没有什么有用的想法。
我不确定你在问什么,但我会尽量给你一个近似值:
您需要创建一个复合对象,其中每个对象都有一个唯一的 ID 并且需要通过一些验证。
我会实现一个 "StoregeManager" 一个 "ComposerManager" 并在 "RollingStock" 中添加一个抽象验证器方法来验证是否可以添加 vagon。
流程是这样的:
免责声明这是用Java写的,但是用notepad++,请不要检查sintaxis。
RollingStock freightCoach = StoregeManager.getFreightCoach();
RollingStock specialCoach = StoregeManager.getSpecialCoach();
RollingStock dieselEngine = StoregeManager.getDieselEngine();
// Check if they are null or throw an exception if has no more elements. Maybe from BBDD or from where you want
Composer.compone()
.add(dieselEngine)
.add(freightCoach)
.add(specialCoach)
.build()
在componer里面,是这样的:
public class Composer {
private StoregeManager storeManager; //Injected or initialized, as you want.
private static Train train;
public Composer build(){
train = new Train;
return this;
}
public Composer add(RollingStock rs) {
if(rs.isValid(train))
train.add(rs);
return this;
}
public RollingStock[] build() {
storageManager.ckeckTrain(train);
return train;
}
}
如果您需要另一个近似值来解决您的问题,您可以将存储放在 Composer 中并将 vagon 的类名作为参数传递。
希望对你有所帮助。
我目前正在为大学做一个火车模拟项目。
这是我的 class 层次结构:
RollingStock
Coach
FreightCoach
PassengerCoach
SpecialCoach
Engine
DieselEngine
ElectricEngine
SteamEngine
Trainset
我的问题:
- 每个教练都有一个唯一的 ID。但是,Engines 和 Trainsets 共享它们的 ID-Space ("series-name")。 "Name" 由 RollingStock 继承,Trainset 和 Engine 都具有属性 "series".
我创建了一个 class "SharedIdSpace" 来实现此功能。但是我不太确定如何很好地解决这个问题(TreeMap,...,?)。
现在,我的主要问题是我必须实现以下功能:
机车车辆可以组合成列车,组合时必须遵守以下限制条件:
- 必须始终至少设置一个 locomotive/train 在有效列车的开头或结尾。
- 组合时,必须始终考虑机车车辆在所需组合点是否具有合适的联轴器。
- 正在组合的机车车辆尚未在另一列火车上使用。 [...]"
我该如何实施?恐怕我没有什么有用的想法。
我不确定你在问什么,但我会尽量给你一个近似值:
您需要创建一个复合对象,其中每个对象都有一个唯一的 ID 并且需要通过一些验证。
我会实现一个 "StoregeManager" 一个 "ComposerManager" 并在 "RollingStock" 中添加一个抽象验证器方法来验证是否可以添加 vagon。
流程是这样的:
免责声明这是用Java写的,但是用notepad++,请不要检查sintaxis。
RollingStock freightCoach = StoregeManager.getFreightCoach();
RollingStock specialCoach = StoregeManager.getSpecialCoach();
RollingStock dieselEngine = StoregeManager.getDieselEngine();
// Check if they are null or throw an exception if has no more elements. Maybe from BBDD or from where you want
Composer.compone()
.add(dieselEngine)
.add(freightCoach)
.add(specialCoach)
.build()
在componer里面,是这样的:
public class Composer {
private StoregeManager storeManager; //Injected or initialized, as you want.
private static Train train;
public Composer build(){
train = new Train;
return this;
}
public Composer add(RollingStock rs) {
if(rs.isValid(train))
train.add(rs);
return this;
}
public RollingStock[] build() {
storageManager.ckeckTrain(train);
return train;
}
}
如果您需要另一个近似值来解决您的问题,您可以将存储放在 Composer 中并将 vagon 的类名作为参数传递。
希望对你有所帮助。