我想在Java中解决不同按钮事件的变化
我有十几个不同的按钮,可以做,不同的动作,。总之,我有大约40到50个按钮,或者40到50个不同的命令。
然后我有很多参数,称为.z和A.z。每个Button事件都会导致一些参数的增加,例如:
button#1将使增加a,b,c和u。
Button#2将使增加f和y。
Button#5可使增加AFG和el。
你可以看到,它变得非常复杂,但仍然可以,如果我不需要实现一个撤销选项。
因此,我需要
.increaseA(); .increase_x(); .increaseWhatever();。通常,Command-Pattern将是我对撤销选项的选择,但在这里,我将得到超过50个不同的类,因为每个命令都会增加不同的参数,即使实际操作是相同的:递增参数。
如果有人能给我一个非常干净的解决方案,我将不胜感激。
到目前为止,我的方法是将命令模式与某种字符串解析器混合起来:使用一个hashmap,其中包含按钮id作为键,而包含要增加的参数的字符串作为值。例如:<button1, "abcefgWY+1">,那么我只需要使用字符串解析器的模型,它将解析命令.但这并不能解决撤销问题,我是在问这是否是一个好方法?
发布于 2016-02-16 22:29:03
如果有一个带有相关字母作为键的整数的散列映射,并且这个值是像这个myIntegers<Character, IntegerValue>那样的实际值,会怎么样?
您的<button1, "abcedgWY">可能更像一个<buttonX, buttonObject>,其中按钮对象是一个字符数组,并且是一个计数器,用于表示已经发生了多少次增量,这样您就可以知道允许减少多少次。逐步遍历字符数组,使用每个字符作为myIntegers哈希映射的键,并按按钮或撤消选项递增或减少。
如果这只是一个普通的撤销,你将需要一个堆栈来推动和弹出,这可以是一个按钮的堆栈。如果它是一个撤销按钮,你只需跟踪多少撤销的增量是允许的。
发布于 2016-02-17 09:29:55
你在找立面设计的图案.
在那里你可以创建你的自定义子命令.
但是,当涉及到编码时,您可能会得到一个更简单的解决方案,正如您所希望的那样:
private void increaseAllOf(String whichOne, int amount) {
for (char c: whichOne.toCharArray() ){
switch(c){
case 'a' : {increaseWhereElse(amount);break;}
case 'b' : {increaseOnOtherPlace(amount);break;}
}
}
}可以在开关语句中定义将调用哪个方法,这取决于whichOne-String的字符。
https://stackoverflow.com/questions/35443910
复制相似问题