On a more general note, I think people should stop trying to use design patterns and concentrate on writing a code that will solve the specific problem. I think patterns are good knowledge if it only makes you write better specific code. I met a teacher at university who thought – I guess he still thinks – that, in a perfect world, we wouldn’t write any specific code and just glue design pattern code coming from libraries.
This is all wrong. What does even modern design patterns mean in Rust? Rust is modern enough to write fast, robust and flexible code without having to cope with academic patterns that will confuse your team mates – e.g. the Visitor, the Singleton or worse, the Decorator. I think it’s good to know how to solve each of these specific problems, and trust me, you don’t need design patterns for that.
For instance, let’s take the Listener / Observer one. It makes you build several types / hierarchies in order to achieve… reactiveness. With a closure, a single closure, you can have the same behavior, with less overhead, less code to write and a more idiomatic way to go – look at how the implemented listeners are just closures.
However, you should have a look into the iterator concept, which is extensively used in Rust, as long as functional programming for what is called iterator adapters in Rust.