可以说“我们”有一些布尔标志,这些标志指示应用在任何给定时间的行为……从触摸的处理方式到onPause()中发生的一切。

boolean touchMode_BlockAllExceptCreateNew = false;
boolean touchMode_UserIsEditting = false;
boolean touchMode_Animation4IsTakingPlace = false;


这些小家伙可能有无数个。 :)

这些“状态”是互斥的-一次或一次只能合法发生。

所以...难道不存在通过将它们组合成一个变量来实现相互排斥的聪明方法吗?

使用枚举几乎是唯一的方法吗?像这样:

private enum TouchMode {
    flibbidyInProgress,
    deletePending,
    userIsEditting,
    jumpingJacks,
    recyclerViewIsOpen,
    normal // none
}

TouchMode currentTouchMode = TouchMode.normal;

private void changeTouchMode(TouchMode desiredTouchMode) {

    boolean undesirableCondition1 = (desiredTouchMode == currentTouchMode);
    boolean undesirableCondition2 = (desiredTouchMode != TouchMode.normal
            && currentTouchMode != TouchMode.normal);

    if (undesirableCondition1 | undesirableCondition2) {
        Log.e("XXX", ">> ILLEGAL TOUCHMODE REQUEST! <<");
        Log.e("XXX", "requested: " + desiredTouchMode
                + ", current: " + currentTouchMode);
    } else {
        currentTouchMode = desiredTouchMode;
    }

}


我以为我已经看到了一种巧妙的方法,可以将'currentTouchMode'设置为int并为其分配十六进制常量。

最佳答案

您应该阅读有关Strategy OOP模式的信息,该模式用于类似的情况。
这里是一些有用的链接:

wiki

refactoring Guru

如果很快-您应该为每个TouchMode(例如AnimationTouchEditionTouch等)创建具有通用接口和特定于类的实现的类层次结构。然后,您应该通过通用界面使用它们。

08-25 21:10