Калькулятор с плагинами: часть 1

В Java 9 был включён проект Jigsaw, позволяющий создавать модульные проекты. В дополнение к пакетам модули позволяют лучше разделить ваш проект на различные части и поддерживать зависимости между ними в консистентном состоянии.

Цель

Изучить Jigsaw, научиться разбивать проект на модули и использовать их в своём приложении. Научиться использовать ServiceLoader.

Описание проекта

Я уже изучил JShell и неизменяемые коллекции в Java 9. Пришло время изучать одно из самых крупных изменений — модули Jigsaw. Изучать лучше на практике. Будет написан калькулятор с плагинами. Калькулятор будет представлять собой отдельный модуль, который экспортирует наружу интерфейс для расширения возможностей калькулятора. Другие модули могут поставлять реализации этого интерфейса, а основной модуль при старте проверяет все зарегистрированные реализации и добавляет кнопки с соответствующими действиями на панель.

Текущий статус

Создал основную форму с тремя основными группами элементов:

  • Экран калькулятора.
  • Цифровые кнопки.
  • Возможность добавлять операции калькулятора как плагины.
  • Модуль стандартных плагинов, который на текущий момент реализует только одну операцию суммирования операндов.

Общее описание реализации

Экранные формы написаны с использованием Swing. Интерфейс для реализации расширений плагинами содержит два метод:

Это не слишком удачный вариант реализации, так как он сильно ограничивает количество возможностей плагинов.  В следующей версии, возможно, стоит передавать в метод calculate некое состояние калькулятора, а не просто два числа.

Файл описания основного модуля “module-info.java” экспортирует наш интерфейс Operation:

Модуль со стандартными плагинами пока содержит только одну добавленную операцию Sum:

В описании “module-info.java” он указывает, что он поставляет эту реализацию:

Основной модуль при старте проверяет наличие реализаций нашего интерфейса и добавляет соответствующие кнопки:

 

Весь код выложил в репозиторий на GitHub и пометил меткой step1, чтобы было видно, что было на текущем этапе.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *