Probably one of the highlights of this chapter, this design pattern will provide us with a bridge to the following chapters, dedicated to functional programming.
So, what is Observer pattern about? You have one publisher, which may also be called a subject, that may have many subscribers, which may also be called observers. Each time something interesting happens with the publisher, it should update all of its subscribers.
This may look a lot like the Mediator design pattern, but there's a twist. Subscribers should be able to register or unregister themselves at runtime.
In the classical implementation, all subscribers/observers need to implement a certain interface in order for the publisher to be able to update them. But since Kotlin has higher-order functions, we can omit this part. The publisher will still have to provide means for observers to be able to subscribe...