【发布时间】:2023-02-10 23:20:41
【问题描述】:
public class Tile
{
State state ;
public void OnStep()
{
if(state == State.normal) { // Do something; }
else if(state == State.empty) { // Do something; }
else if(state == State.hazard) { // Do something; }
}
}
基本上,OnStep 将根据“状态”变量执行不同的行为。
我真的很想删除那些“if 语句”,但我不想将 Tile 类更改为抽象类。它现在可以工作,但我想知道是否有更好的技术来管理它。当前“状态”是枚举。 (我想知道是否有什么东西可以同时绑定状态和动作)。
【问题讨论】:
-
“我真的很想删除那些‘if 语句’,但我不想将 Tile 类更改为抽象类。”那会有什么关系?
-
“目前'状态'是枚举。(我想知道是否有任何东西可以同时绑定状态和动作)”当然。其一,您可以使用 switch 而不是 if/else。但这只是一个很小的变化。但是你可以使用例如策略模式......基本上这是一个状态机,对吧?
-
这实际上取决于那些
//Do somethings 的性质。如果它们每个都可以被同一个类中的无参数方法替换,那么state可能只是一个Action而不是更新以反映接下来应该调用哪个方法。还取决于state的其他用途。当您到目前为止从您的问题中抽象出您的示例以致有如此多的答案时,这就是问题所在可能有可能。 -
你的选择是,使用
switch,使用Dicitonary<State, Action>,或者你似乎表明这不是你想要做的,为Tile可以拥有的每个State在Tile上创建子类(这仅当State不可变时才有意义) -
@Fildor,起初我想把 Tile 做成抽象类并为每个状态创建不同的子类(而不是 if 语句)
标签: c#