I think this pattern

Disclaimer