这种实例化方法是否遵循设计模式和简洁的代码?

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

我正在写一个小游戏,为此我使用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))
        )
    }
}

但是我不知道这种策略是否算作干净的代码,或者是否有更好的方法或设计模式?

kotlin design-patterns structure game-development
1个回答
0
投票
在您的情况下,使用特殊方法(工厂),例如:

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) ...

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