This is a collection of Coding Katas that should help learning when and how to use a specific Design Pattern.
The Katas contain specifications like they could come up in a real life sprint. The features are supposed to be solved from the top to the bottom. On the first try you should code like you think it is fitting. Do not try to use the design pattern that is explained in the kata, just code as you think it seems fit. Hopefully this leads to big if/else or switch/case solutions, and gets a pain when a new requirement pops up that lead to big changes in your design. But this is ok, because you first have to experience the pain and understand the problem before you can truly grasp the advantage that a design pattern brings along when applying to a specific problem.
Each Kata has a short explanation on the start what problem this Design Pattern is trying to solve. You should read this first to see if the Design Pattern might help to solve the problem you are facing right now.