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