producer pattern