Если вы инкапсулируете свои операции в виде объектов, вы часто можете использовать структуру данных для замены switch
-подобного оператора и, надеюсь, просто добавят операции в будущем.
Например, это один из подходовдля инкапсуляции операций как объектов: использование Enum для представления операций:
http://download.oracle.com/javase/1.5.0/docs/guide/language/enums.html
public enum Operation {
PLUS { double eval(double x, double y) { return x + y; } },
MINUS { double eval(double x, double y) { return x - y; } },
TIMES { double eval(double x, double y) { return x * y; } },
DIVIDE { double eval(double x, double y) { return x / y; } };
// Do arithmetic op represented by this constant
abstract double eval(double x, double y);
}
Вы можете расширить этот пример, чтобы связать символ с каждой операцией и предоставить статический метод длянайдите операцию, связанную с символом.[[Меня раздражает смешивание кода пользовательского интерфейса / представления с кодом логики / домена, но вы упомянули, что хотите просто, поэтому, возможно, это нормально для вашей программы.]]
Если вы инкапсулируете свои операции какобъекты, то вы можете рассмотреть структуру данных для замены кода, похожего на переключатель:
если будет много операций, рассмотрите возможность создания хэш-карты для сопоставления символов с операциями.
если имеется небольшое количество операций, может быть достаточно дешево иметь набор всех операций и просто выполнять итерацию всех операций, чтобы спросить, действуют ли они на предоставленный пользователем символ и использоватьпервый найденный.