O que vc precisa ter em mente para poder utilizar os design patterns é que existem tres regras básicas que se voce souber e utilizar voce conseguira implementar bons sistemas sem nem saber os nomes dos patterns. Sao elas:
Favor composition over inheritance (Favoreça a composição ao invés da herança): Sempre que vc tiver uma funcionalidade e desejar colocar outras outras funcionalidades nessa primeira ao invés de usar herança para adicionar a nova funcionalidade, tente utilizar outra classe e agrupar vários objetos para criar uma funcionalidade diferente.
Low coupling e High Cohesion (Baixo acoplamento e alta coesão): Funcionalidade que tem a ver umas com as outras devem ficar próximas (Na mesma classe por exemplo). E quanto menos as classes se conheçerem melhor.
Program to Interfaces Not Implementations (Programe para interfaces, não implementações): Crie seus códigos baseando-se em interfaces, ao invés de classes concretas. Quando vc programa para uma interface vc programa por contrato (a interface define o contrato, que sao os métodos que ela oferece). Esse tipo de programação favorece a flexibilidade e acaba diminuindo o acoplamento