Ясно, что для такого рода вещей необходимо выполнить две грубые задачи.
Первый - определить правила, а второй - фактически выполнить их.
В зависимости от вашей фильтрации и динамичности, запросы правил могут быть легко запомнены, поэтому, вероятно, стоимость поиска приблизится к нулю.500 правил - это не много, если подумать.
Далее - фактическое исполнение.Если все ваши вещи являются синглетонами, то вам нужно позаботиться о запуске синглтонов, безопасности потоков и т. Д.
По сути, просто убедитесь, что каждое из ваших правил имеет жизненный цикл.«запустить» «запустить» «остановить».Если это настоящий синглтон, которому требуется некоторое состояние от запуска к запуску, то методы start и stop, скорее всего, будут содержать логику.Если для входов требуется лишь небольшая логика, то, вероятно, нет необходимости запускать и останавливать (они могут быть пустыми методами), или чтобы он вообще был одиночным, так что просто создайте новый экземпляр, запустите егои выбросьте его.
Вы не упоминаете, что такое "правило" с точки зрения логики.Это могут быть простые Java-классы, которые следуют этому жизненному циклу.Добавьте аннотацию @SingeletonRule или внедрите isSingleton, что угодно.
Действительно, на этом уровне в этой системе мало ракетостроения.Магия в основном заключается в метаданных и фактическом создании списка правил для исполнения.
Простые системы правил просты.