With the popularization of object-oriented technologies in software development, more and more schools of software engineering are adding design patterns into their curricula as an essential component. However it is not easy for students who are still not very well-versed in object-oriented technologies to learn this course well. Many CS and SE students find it difficult to apprehend. Even though they understand the patterns themselves, it is still hard for them to use these patterns in practical projects. It is a challenge for teachers to make their students understand the kernel of design patterns in a limited amount of teaching hours. In this paper we discuss several problems in teaching design patterns and introduce our practical experience of teaching design patterns by applying a modified problem-based learning pedagogy. An intact teaching case is also given in the paper.