Как мой код может вместить моддинг / плагины?

1

В общем, как я могу писать программы для размещения моддинга или плагинов? Является ли каждый метод завернутым в другое поведение? Все мои поиски привели к тому, что это ресурсы для написания плагинов и модов; Я ничего не могу найти при написании систем. Что касается java, как я могу разоблачить внутренние части логики в других системах без использования рефлексии?

  • 0
    Посмотрите на интерфейсы . В простой модели «расширения» будут реализовывать один или несколько интерфейсов, которые в свою очередь будут использовать один или несколько интерфейсов «хоста». То есть внутренняя логика раскрывается не напрямую, а только через определенные контракты. Используя интерфейсы, код обычно может свободно передавать либо фактические объекты (скрытые за интерфейсами), либо прокси / фасадные объекты (которые также реализуют указанные интерфейсы) - между хостом и расширением, однако существуют только интерфейсы / контракты.
  • 0
    Таким образом, я должен написать свои собственные реализации / поведение как одно из многих возможных поведений, и позволить плагинам определять свои собственные реализации и расширять мои классы? Что, если есть поведение в отношении одного компонента, который я хочу гарантировать, но также разрешить расширение плагинов?
Показать ещё 1 комментарий
Теги:
plugins

1 ответ

0

Один из способов сделать это - создать собственный ClassLoader, который может загружать классы из указанного местоположения, которое не находится в системном пути. (Если он находится в системном пути к классам, система ClassLoader сначала найдет классы, и вы не сможете их выгружать.) Создание экземпляров требует немного отражения, но как только они создаются, вы можете обращаться с ними точно так же, как любой другие случаи.

Это работает, потому что, хотя только пользовательский ClassLoader знает о фактическом классе этих экземпляров, он получает свое определение своего суперкласса (ваш класс или интерфейс плагина) из системы ClassLoader. Поэтому другие классы, загруженные системой ClassLoader (т.е. Остальная часть вашей программы), могут ссылаться на эти динамически созданные экземпляры своим суперклассом.

Я использовал библиотеку утилиты Brian Clapper, чтобы найти классы, расширяющие мой класс плагина.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню