Скажите мне, пожалуйста, а настоящие программисты действительно рассуждают «а применю–ка я сейчас такой–то паттерн»? Просто по–моему большинство действует по наитию, типа «просуну–ка я вот это вот в это».
Я учился программировать почти исключительно на чистом C, с примерами в виде ядра linux и прочих открытых проектов, и никогда не задавался подобными вопросами. И сейчас, после мира микроконтроллеров и embedded linux, я думаю, а не податься ли мне, например в C++ (хоть он и абсолютно нечитаем, на мой взгляд).
По наитию действуют балбесы, большинство паттернов есть готовое, отточенное, хорошее решение типовой задачи, которое можно применить за пять минут, вместо того чтобы писать два дня велосипед.
Саомо собой никто не мыслит категориями "а применю–ка я сейчас такой–то паттерн".
Как и в любом ремесле такие вещи с опытом начинают рождаться сами по себе. Важно понимать, какую задачу призван решать тот или иной паттерн, от какой головной боли избавлялись его создатели.