我正在写一个小游戏,为此我使用Kotlin。我想用以下课程为建筑物建模:
class Building (
val name: String,
val inputs: Array<Resource>,
val outputs: Array<Resource>
) {}
我想为地图创建此类的多个实例,但我不想每次都为同一建筑物的相同数据填充构造函数参数。所以我的想法是使构造函数私有,并在compainon对象中编写创建函数。
class Building private constructor(
val name: String,
val inputs: Array<Resource>,
val outputs: Array<Resource>
) {
companion object {
fun createWoodcutter(): Building = Building(
"Woodcutter",
arrayOf(
Resource(ResourceType.WOOD, 1),
Resource(ResourceType.WORKFORCE, 3),
Resource(ResourceType.MONEY, 10)
),
arrayOf(Resource(ResourceType.PLANKS, 1))
)
}
}
但是我不知道这种策略是否算作干净的代码,或者是否有更好的方法或设计模式?
enum class TypeBuilding {WOOD, CONCRETE, METAL, ...}
...
fun createBuilding(type: TypeBuilding): Building = when (type) {
TypeBuilding.WOOD -> Building("Woodcutter", ...)
TypeBuilding.CONCRETE -> Building("Concrete", ...)
TypeBuilding.METAL -> Building("Metal", ...)
else -> Building("Default", ...)
}
...
val building1 = createBuilding(TypeBuilding.WOOD)
val building2 = createBuilding(TypeBuilding.CONCRETE)
val building3 = createBuilding(TypeBuilding.METAL)
val building4 = createBuilding(TypeBuilding.WOOD)
...