Это можно рассматривать как общий вопрос Java, но для лучшего понимания я использую Lucene в качестве примера.
Вы можете использовать различные токенизаторы в Lucene для токенизации текста. Есть основной абстрактный класс Tokenizer, а затем множество различных классов, расширяющих его. То же самое для TokenFilter.
Теперь кажется, что каждый раз, когда вы хотите проиндексировать документ, создается новый Tokenizer. Вопрос в том, что Tokeinzer - это просто служебный класс, почему бы не сделать его статичным? например, Tokenizer, который преобразует все буквы в нижний регистр, может иметь статический метод, который делает это только для каждого входного сигнала, который он получает. Какой смысл создавать новый объект для каждого фрагмента текста, который мы хотим проиндексировать?
Стоит упомянуть одну вещь - у Tokeinzer есть приватное поле, содержащее входные данные, которые он получает для токенизации. Я просто не понимаю, почему мы должны хранить его таким образом, потому что объект уничтожается сразу после завершения процесса токенизации и возвращается новый токенизированный текст. Единственное, о чем я могу подумать, так это о многопоточном доступе?
Спасибо!