![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Kizja |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
Есть консольная программа, которая должна обрабатывать определённые входные данные и потом производить некие манипуляции и выводить результат. Данные могут быть введены как через консоль, считаны из файла (возможны разные типы и соответственно структура данных — не только скажем в xml формате), взяты из базы итд. Так же и с выводом обработанных введённых данных. То, какой тип использовать задаётся через консоль, т.е. возможны варианты:
-xml input.xml -xml output.xml -console -xml output.xml -xml input.xml -console -console -console ( вместо -xml возможны ещё другие типа -txt, -csv итд ) Решил для каждого варианта входных и выходных типов сделать свой класс, который будет заниматься преобразованием в однородный тип данных перед обработкой информации. В результате получилось примерно следующий не очень приятный код (очень смущает куча if-условий):
Думал, что может быть сделать так:
Но при условии, что имя файла динамически задаётся входным параметром, то так вроде тоже сделать не получится. Можно конечно сделать в едином для всех классов Handler интерфейсе метод setFileName() и его использовать после получения из мапы определённого Handler класса, но такой вариант мне не нравится тем, что не всегда это нужно - т.е. например в случае ConsoleInputHandler вообще нету файла и инициализировать ничего не надо (т.е. не хочу засовывать в общий интерфейс методы, которые не предназначены для всех классов его имплементящих). Может у кого-то есть идеи как без лишних извращений решить данную задачу ? |
||||
|
|||||
jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Как насчет шаблона Chain of Responsibility?
Пусть в роли Handler выступят ваши классы-обработчики. Передаете параметры по цепочке handler'ов и каждый из них сам решает, обрабатывать или передавать дальше. -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
RageSteel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 6.2.2010 Репутация: 1 Всего: 2 |
Можно воспользоваться enum'ами:
Ну а для более сложных случаев можно воспользоваться apache commons cli. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |