

         ┌────────────────────────┐
         │      «interface»       │
         │        Subject         │
         ├────────────────────────┤
         │ +attach(Observer) void │
         │ +detach(Observer) void │
         │ +notify() void         │
         └────────────────────────┘
                      △
                     ┌┘
                     ┆
                     ┆
       ┌───────────────────────────┐
       │       EventEmitter        │
       ├───────────────────────────┤
       │ -List~Observer~ observers │
       ├───────────────────────────┤
       │ +attach(Observer) void    │
       │ +detach(Observer) void    │
       │ +notify() void            │
       └───────────────────────────┘
                     │
                     └┐
                      │
                      ▼
             ┌────────────────┐
             │  «interface»   │
             │    Observer    │
             ├────────────────┤
             │ +update() void │
             └────────────────┘
                    △   △
           ┌┄┄┄┄┄┄┄┄┘   └┄┄┄┄┄┄┄┄┐
           ┆                     ┆
           ┆                     ┆
  ┌────────────────┐    ┌────────────────┐
  │     Logger     │    │    Alerter     │
  ├────────────────┤    ├────────────────┤
  │ +update() void │    │ +update() void │
  └────────────────┘    └────────────────┘
