让我们说“我们”有一些布尔标志,这些标志指示应用在任何给定时间的行为……从触摸的处理方式到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并为其分配十六进制常量。
答案 0 :(得分:1)
您应该阅读有关Strategy
OOP模式的信息,该模式用于类似的情况。
这是一些有用的链接:
如果很快-您应该为每个TouchMode
(例如AnimationTouch
,EditionTouch
等)创建具有通用接口和特定于类的实现的类层次结构。然后,您应该通过通用界面使用它们。