我正在尝试创建“可重用类”(如果这是此处使用的正确术语)。
假设我正在网格视图中使用图块制作一个小游戏。我有这样的东西:
enum gridTileClass { goblin, elf, dragon, dungeonFloor1 }
class gridTileData {
final gridTileClass type;
late final String tileImage;
int currentHealth;
gridTileData({
required this.type,
required this.tileImage,
required this.currentHealth,
});
}
但是当我设置面板时,我必须手动输入网格上每个空间的数据,如下所示:
List<List<gridTileData?>> initializeBoard(int currentLevel) {
newBoard[0][0] = gridTileData(
type: gridTileClass.dungeonFloor1,
tileImage: './lib/images/dungeon_tile_1.png',
currentHealth: 0,
);
newBoard[0][1] = gridTileData(
type: gridTileClass.dungeonFloor1,
tileImage: './lib/images/dungeon_tile_1.png',
currentHealth: 0,
);
newBoard[0][2] = gridTileData(
type: gridTileClass.goblin,
tileImage: './lib/images/goblin1.png',
currentHealth: 0,
);
newBoard[0][3] = gridTileData(
type: gridTileClass.goblin,
tileImage: './lib/images/goblin1.png',
currentHealth: 0,
);
}
现在这是一个简化的示例,实际上它要乏味得多,因为我的一个类不是 3 个属性,而是 20 个或更多。
我希望能够做类似的事情:
newBoard[0][1] = goblin;
不知何故,因为我之前已经在某个地方告诉过它妖精是什么。
我建议您使用Builder设计模式
你将能够做这样的事情:
newBoard[0][1] = GoblinBuilder.build();
Builder 和 GoblinBuilder 的代码为:
abstract class Builder{
gridTileData builder();
}
class GoblinBuilder extends Builder{
@override
gridTileData builder(){
return gridTileData(
type: gridTileClass.goblin,
tileImage: './lib/images/goblin1.png',
currentHealth: 0,
);
}
}
您可以对其他角色或更多角色执行相同的操作。
有关构建器设计模式的更多信息: