Я хочу, чтобы разрешить изменение различных кнопок событий в Java:Как обрабатывать большое количество различных команд кнопок?
У меня есть десяток различных кнопок, которые будут делать различные действия. Все вместе, как будто у меня есть от 40 до 50 кнопок или от 40 до 50 различных возможных команд.
Тогда у меня есть много параметров, называемых a..z и A..Z. Каждое событие Button приведет к увеличению некоторых параметров, например: button#1
будет увеличить a, b, c и u.
Button#2
будет увеличить f и y.
Button#5
будет увеличить AFG и el.
Вы можете видеть, что он становится очень сложным, но все равно в порядке, если мне не нужно будет использовать отменную опцию.
Таким образом, мне нужно
Как-то сказать, моя модель, чтобы увеличить кучу параметров НЕ путем вызова
.increaseA(); .increase_x(); .increaseWhatever();
для каждого возможного параметра.Помните и инвертировать обработанные команды, относительно повышенными параметрами (которые могут изменяться по типу и количеству)
Обычно Command-Pattern был бы мой выбор для Undo-Options , но здесь я бы получил более 50 разных классов, потому что каждая команда увеличивала бы разные параметры, даже если фактическая операция одинакова: увеличивая параметры.
Я был бы признателен, если бы кто-нибудь мог показать мне очень чистое решение.
Мой подход до сих пор был бы смешивать шаблон Command с каким-то Струнным-парсером: Используя HashMap, содержащей кнопку-идентификатор в качестве ключа, и строка, состоящая из параметров должны быть увеличена, как ценность. Например: <button1, "abcefgWY+1">
Тогда мне понадобится только моя модель с парсером String, которая разрешит эту команду ... но это не решает проблему UNDO, и я спрашиваю, является ли это хорошим подходом?
Спасибо за ответ. Когда я буду нажимать кнопку 1, например, символы abc, а затем нажмите кнопку2, увеличив afg, затем кнопка 3 с bhj ... не отменит от кнопки 3, а также не уменьшит символы из кнопки2 (слишком рано)? (Потому что вы сказали, что я вижу, возможно ли отменить в зависимости от счетчика). Мне нравится идея с помощью Hashmap и использование Stack for undo (который я уже рассмотрел) хотя :) Я должен был упомянуть, что нельзя нажимать одну и ту же кнопку несколько раз подряд. – ElectRocnic
, если вы управляете вызовами отмены только через всплывающее окно, вам вообще не нужно беспокоиться о заказе. Я больше интересовался тем, как ваш вариант отмены отображается пользователю. В вашем последнем комментарии нажатие 1, 2, 3 и отмена 3 будет в порядке. Но если вы показываете кнопки отмены, которые включены без предварительной проверки кнопки buttonObject, чтобы увидеть, была ли она увеличена, тогда у вас будет проблема с уменьшением. – essa