如何处理大量不同的Button命令?

时间:2016-02-16 22:05:13

标签: java command action undo command-pattern

我想解决Java中不同Button事件的变体

我有十几个不同的按钮可以执行不同的操作。 总而言之,我有大约40到50个按钮或40到50种不同的可能命令。

然后我有很多参数,叫做a..z和A..Z。 每个按钮事件都会导致某些参数增加,例如:
button#1增加a,b,c和u
Button#2增加f和y Button#5增加AFG和el

您可以看到,它变得非常复杂,但如果我不需要实现撤消选项,那么仍然可以。

因此,我需要

  1. 以某种方式告诉我的模型增加一堆参数,而不是通过为每个可能的参数调用.increaseA(); .increase_x(); .increaseWhatever();

  2. 记住并反转已处理的命令,关于增加的参数(可能因类型和数量而异)

  3. 通常情况下,命令模式将是我对Undo-Options的选择,但在这里我将获得50多个不同的类,因为每个命令都会增加不同的参数,即使实际操作是相同:增加参数

    如果有人能给我一个非常干净的解决方案,我将不胜感激。

    到目前为止,我的方法是将Command模式与某种String-parser混合: 使用包含button-id作为键的hashmap,以及包含要增加的参数的String作为值。例如:<button1, "abcefgWY+1"> 然后我只需要我的模型与字符串解析器,它将解析命令...但这不解决UNDO问题,我问这是否是一个好方法?

2 个答案:

答案 0 :(得分:0)

如果有一个Integers的hashmap,关联的字母为key,那么值就是这个myIntegers<Character, IntegerValue>的实际值。

你的<button1, "abcedgWY">可能更像<buttonX, buttonObject>,其中按钮对象是一个Character数组,一个计数器表示增量发生了多少次,这样你就知道允许多少次递减。使用每个字符作为myIntegers hashmap的键,逐步执行Character数组,并按每个按钮或undo选项递增或递减。

如果它只是一般撤消,你需要一个推送和弹出的堆栈,它可以是一堆buttonid。如果它是每个增量按钮的撤消按钮,则只需跟踪允许每个增量的撤销数量。

答案 1 :(得分:0)

你正在寻找立面设计模式......

您可以在那里创建自定义子命令......

但是在编码方面,你可能会得到一个更简单的解决方案,你可以根据需要调用facade-methode:

private void increaseAllOf(String whichOne, int amount) {

    for (char c: whichOne.toCharArray() ){
        switch(c){
        case 'a' : {increaseWhereElse(amount);break;}
        case 'b' : {increaseOnOtherPlace(amount);break;}

        }
    }

}

你可以在switch-statement中定义将调用哪个方法,具体取决于whichOne - String

的字符