У меня очень конкретная ситуация. Контекст ситуации таков: я создаю плагин для Minecraft и столкнулся с небольшой проблемой дизайна. Я построил иерархию абстрактных классов, интерфейсов и производных от них конкретных классов (на Java, если это имеет значение). Вот общее представление о структуре:
публичный интерфейс ICommandUsage, ICommandPattern, IPermissionNode
(они реализованы таким образом, что каждая команда должна определять правильное использование команды, следовать определенному шаблону для соответствия регулярному выражению и иметь узел разрешений, чтобы отправитель команды мог использовать команду или нет)
общедоступный абстрактный класс Command = базовый класс
общедоступный абстрактный класс ConsoleCommand = производное подмножество класса Command
открытый абстрактный класс PlayerCommand = производное подмножество класса Command
общедоступный абстрактный класс UserCommand = производное подмножество PlayerCommand
общедоступный абстрактный класс ServerAdminCommand = производное подмножество PlayerCommand
Остальные классы представляют собой различные конкретные реализации, определяющие функции из интерфейсов и абстрактных классов.
Вот моя дилемма: при запуске подключаемого модуля «основной» класс регистрирует все команды, чтобы, когда пользователь вводит команду, commandDelegate мог затем интерпретировать команду посредством сопоставления с образцом. Сопоставление с образцом происходит из метода getPattern(), который возвращает строку, полужестко запрограммированную в каждый конкретный класс.
Моя логика такова, что каждый конкретный класс должен отвечать за свои шаблоны, узлы разрешений и использование, поэтому эти методы должны существовать в самих классах.
Основная проблема заключается в том, что когда я регистрирую команды в основном классе, мне приходится передавать нулевые аргументы конструкторам, чтобы создать "фальшивую" команду...
то есть registerCommand("console_info", new ConsoleInfo(null, null));
Я признаю, что это плохая практика, но я не знаю, где искать, чтобы найти решение. Если бы кто-нибудь мог указать мне в правильном направлении, я был бы очень признателен.