Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Design, Quality, Testing > Коллизия при загрузке классов


Автор: omickron 6.9.2012, 07:52
Приветствую, коллеги.

С Java работаю не очень давно, в связи с этим вопрос.

Как должно быть:
[*] Пользователь запускает консольную программу
[*] Ему предлагается выбрать из списка, какую фигуру нарисовать: круг, треугольник, квадрат, чёрта лысого...
[*] Он выбирает, что хочет нарисовать
[*] Рисуется фигура

Как реализовано:
[*] Иерархия классов фигур для отрисовки с общим наследником.
[*] В каждом конечном классе, который отрисовывается, есть код static {Cache.getInstance.registerClass();}, в котором делается регистрация в кэше.
[*] Кэш, в котором должны быть зарегистрированы все фигуры (название и созданный класс, который будет отрисовывать) - HashMap<String, Figure>
[*] Когда запускается программа, пользователю предлагается выбрать фигуру из содержимого кэша, т.е. кэш возвращает список <String>
[*] Пользователь выбирает фигуру, по имени-ключу находится <Figure>, у которой вызывается базовый метод Draw.
[*] Для того, чтобы добавить в функционал отрисовку новой фигуры, достаточно наследоваться от какой-то существующей и зарегистрировать в кэше.

Вопрос:
При запуске программы кэш должен уже содержать в себе все отрисовщики, чтоб спросить пользователя, что он хочет.
Но проблема в том, что классы отрисовщиков не загружаются в память до тех пор, пока не понадобятся.
Как быть?

Автор: LSD 6.9.2012, 11:01
Используй http://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)