GoF design patterns implemented in Ruby