У меня есть абстрактный класс ChainHandler и много реализаций ChainHandler.
Другие программисты напишут другие реализации этого ChainHandler.
Моя программа реализует шаблон проектирования Chain of Responsibility.
Каждая конкретная реализация ChainHandler реализует метод дескриптора.
public abstract void handle(SomeclassA a);
Если один обработчик может обрабатывать «a», он обрабатывает его, и цепь останавливается.Если нет, то «a» передается следующему обработчику, пока он не достигнет конца цепочки.
Я хочу, чтобы каждый конкретный обработчик имел список всех «a», которые он смог обработать.Но я не хочу заставлять разработчика конкретных классов не забывать записывать его в список при успешном завершении.
Есть ли элегантный способ сделать это?
Моя лучшая идея заключалась в следующем:
1 - Измените метод handle на protected в конкретных классах, сделайте так, чтобы он возвращал логическое значение, и измените имя на innerhandle;
2 - Измените метод handle в абстрактном классе на publicи это вызывает внутреннюю ручку.В случае успеха он добавляет объект в список.