In NestJS event patterns, an event is created as a class and emitted to the event bus. The bus holds events in a queue. It checks each event against registered patterns, which are event classes linked to handlers. If the event matches a pattern, the corresponding handler's handle() method runs, processing the event data. For example, a UserCreatedEvent with a userId is emitted, matched, and handled by UserCreatedHandler, which logs the userId. After handling, the event is removed from the queue. If no handler matches, the event is simply discarded. This cycle allows decoupled communication where events trigger actions without direct calls. Handlers can also emit new events, continuing the event flow.