Java-программа, использующая структуру типа плагина, нуждается в обратной связи по правильному шаблону проектирования - PullRequest
1 голос
/ 02 февраля 2011

Извините, если раньше на этот вопрос задавали / отвечали, но я не был уверен, как правильно его сформулировать, и поэтому мои поиски могли быть неправильно сформулированы.

Я создаю приложение Paint на Java в качестве задания.Я решил сделать это, используя подход типа «плагин».Основное приложение предлагает очень мало с точки зрения функциональности, но выполняет динамическую загрузку классов и регистрирует различные плагины и тому подобное.По сути, это позволяет мне добавлять различные компоненты без необходимости что-либо жестко кодировать в основной программе: существует метод LoadComponents (), который находит все различные плагины в подпакете и загружает их.Это прекрасно работает.

Каждый компонент отвечает за создание и регистрацию своих элементов пользовательского интерфейса в JFrame основного приложения, а также за реализацию своих собственных EventListener.Пока все это прекрасно работает.

Вот моя проблема: у меня есть JPanel, который я использую в качестве холста, который, очевидно, реализует метод paintComponent () для выполнения реальной рисования.Это содержится в основном приложении и, таким образом, предлагает очень скудную функциональность.По мере добавления различных компонентов я хотел бы добавить все больше и больше функциональных возможностей в базовый класс Canvas, но, похоже, не могу найти хороший, чистый и эффективный способ сделать это.

В настоящее времявсе, что я могу придумать, это создать подклассы Canvas, которые наследуют его функциональность.Однако, чтобы сделать это, используя текущий подход, при котором плагины и функциональные возможности динамически загружаются во время выполнения, мне нужно предложить метод setCanvas () или такой, который позволяет мне переопределить ссылку на базовый класс Canvas в реальном пользовательском интерфейсе, который, чтобыМне, это не очень эффективная и не распространенная практика.

Существует также проблема нескольких плагинов, добавляющих функциональность в базовый класс Canvas, а затем выясняющих, что должно идти первым.

Любые идеи,Предложения или комментарии по этому вопросу будут с благодарностью.

1 Ответ

1 голос
/ 02 февраля 2011

Я думаю, что термин «плагин» или не совсем то, что вы делаете, или это не лучший путь разработки для этого приложения.Компоненты посылают «Команды» на «Холст», который рисует (и продолжает перерисовывать) каждую команду.Таким образом, каждый элемент пользовательского интерфейса рисования должен был бы иметь возможность создавать команды, но «Canvas» не должен знать, откуда он появился.

...