Design Patterns & Distributed Systems