Я не уверен, что цепь ответственности можно смоделировать следующим образом. Обработчики цепи ответственности могут делать только 2 вещи. Обработайте запрос или передайте его следующему обработчику. Он не знает, какой обработчик следующий или кто должен обрабатывать запрос, он только знает, что не может.
Ваши обработчики должны быть более избирательными. Если у вас есть обработчик, который вы хотите обработать в окнах IE, и один для обработки Java-приложения, тогда оба обработчика должны быть в состоянии определить, какой тип окна они обрабатывают. Обработчик IE проверяет, является ли окно IE, если не передает его, ему все равно, обрабатывается ли оно где-то еще, он просто знает, что не может его обработать.
Мое предложение, создать специальные обработчики, которые обрабатывают только один тип окна. Сделайте 1 универсальный обработчик. Затем упорядочите обработчики так, чтобы общий обработчик был последним. Любые специализированные обработчики попытаются запустить его в первую очередь, если ни один из них не найден, универсальный обработчик обработает запрос.
Если вы действительно хотели сделать то, что предлагаете, вы можете сделать несколько проходов обработчикам. Пройдите 1, только очень специализированные окна будут пойманы. Пройдите 2 менее специализированных окна, попадаются. И т.д. и т.п., пока вы не устанете делать пассы. Тем не менее, для меня ... Я говорю, не пытайтесь делать много с одним обработчиком. Если каждый обработчик отвечает за 1 окно, то порядок не имеет значения, они всегда будут обрабатывать правильный тип окна. Любые неизвестные окна будут перехвачены универсальным обработчиком.