Не совсем понятно, что вы имеете ввиду под паттернами.
А задачи по типам данных и возможностям языка, можно найти в большинстве архивов по алгоритмическому программированию и использовать их исходя из условия задач. При повышении сложности задачи, появляется необходимость использования тех или иных возможностей языка программирования. Например acmp.ru или
https://www.spoj.com/
Сами же паттерны это по сути стиль написания кода, который накладывает какие-либо ограничения для правильного функционирования программы и легкости её поддержания и некоторые дополнительные возможности, которые определяют структуру кода, а не его логику. Как синглтон решает задачу не дублирования данных и т. д.