Design Patterns é um assunto recorrente de todas as linguagens.
Você começa escrevendo algumas linhas de código, a coisa começa a tomar forma e quando você vai ver, toda a funcionalidade que você implementou está contida em uma única função, monolítica, que você terá dificuldades de entender o que fez em pouco tempo.