Это очень похоже на сервлет-фильтры, за исключением того, что вы хотите иметь возможность применять один и тот же фильтр несколько раз.
Как и другие, предположил, что Цепь ответственности может быть уместна, особенно если фильтр должен иметь возможность прервать дальнейшее выполнение других фильтров и нуждается в управлении «вокруг», то есть он хочет выполнить некоторую обработку до остальной части цепочка делает это и выполняет некоторую другую обработку после.
Но для меня более важным является разделение понятий отдельного фильтра и цепи, которая представляет собой расположение фильтров в цепочке (или последовательности).
Я думаю о unix-трубах. Каждый Filter
делает свое дело, не зная, откуда приходит его вход, и кто потребляет его выход.
Компонент Controller
создает цепочки по мере необходимости, я не знаю, применима ли одна целая цепочка ко всем файлам или существует фиксированный набор цепей, один из которых выбран каким-либо образом для каждого файла, или новый цепочка создается для каждого файла.
FilterChain
применяет фильтры. Если вы следуете шаблону Chain of Responsibility, ему нужно только вызвать первый (верхний) фильтр, иначе он должен будет проходить через все фильтры в цепочке.
декоратор узор? –