Distributed OOD• Patterns: Observer, Strategy
WhatsApp / Chat System
Hard
Problem Summary
Design a chat application managing real-time connections, chat history, and dynamic user statuses.
Functional Scope
- Deliver messages in real-time when recipient is online.
- Queue messages for offline users and deliver them once they connect.
- Support read receipts (Sent -> Delivered -> Read status).
Entity-Relationship (ER) Schema
User [1] <---> [*] UserConnection User [1] <---> [*] ChatMessage ChatMessage [1] <---> [1] MessageStatus
Design Approach
Protect the active connections directory using concurrent collections. Use message queues to isolate offline delivery logic from active socket threads.
Core Classes & Models
User (ID, active status, contacts)Message (Sender, Recipient, timestamp, contents, status)MessageService (Queues, routes messages)
Code Blueprint
public class Message {
private String id;
private String sender;
private String recipient;
}