client pattern