design pattern with filters intercept incoming requests and outgoing responses, thereby allowing pre- and post-processing without changing existing processing code