add publisher-provider pattern and update readme