responsibility pattern