【发布时间】:2018-10-03 10:45:48
【问题描述】:
假设“我们”有一些布尔标志,它们指示应用在任何给定时间的行为方式......从如何处理触摸到 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 并为其分配十六进制常量。
【问题讨论】:
-
你也可以看看
State模式
标签: java enums int boolean refactoring