Представь, что каждый блок - предопределённый фильтр на множество элементов.
Джава класс в этих блоках - один и тот же, отличается только параметрами (ИД фильтра и его параметры)
Соответственно, предполагается, что я заранее придумал с пару десятков фильтров, и потом переставляя и комбинируя блоки - по разному их применяю.
Предполагается, что можно передавать выход одного фильтра на вход другого.
Так же, необходимо разбиение множества на группы с последующей различной обработкий групп и объединение нескольких групп в одну.
Так же в любой ветке может быть применено некое действие, где в качетсве обрабатываемого множества используется текущая комбинация фильтров.