1

当应用程序状态发生变化时,应用程序循环(或游戏循环,不管它叫什么)现在必须执行一组不同的指令。通常,这意味着使用 if 语句。

我发现使用接口和接口引用变量可以减少对 if 语句的需求,并且它使状态更改看起来更好。

class red implements IColor
class blue implements IColor

IColor colorState;

Application loop
{
    colorState.drawColor
}

这是我所说的不需要 if 语句的接口的一个例子。现在,当您想将状态从红色更改为蓝色时,您只需

colorState = a reference to a blue instance;       

但我想知道是否像这样简单的 if 语句

if (bool)
    stuff
else
    stuff

比界面差?我通常知道语句是否应该很昂贵,并且分支预测器会发挥作用,但是在这里甚至可以预测分支吗?

4

1 回答 1

2

您正在将“状态”模式的典型实现与 if 语句进行比较。不管布尔表达式是什么,至少会有一个分支点。但是,如果状态不经常更改,则大多数情况下将正确预测分支。

但是,效率并不是“状态”模式的最大优势之一:它为熟悉该概念的程序员提供了更好的可读性,并且还通过将与状态相关的更改紧密结合在一起来减少您的维护责任。大多数情况下,分支的潜在低效率将与您的状态实现完成的实际“有效负载”工作的 CPU 需求相比相形见绌。

于 2013-10-18T00:25:58.373 回答