In my mind, Profiles are like different facets of a users' interaction with a website, and patterns are combinations of values for those facets to form a type of user. A user will build up profile values during their visit to a site depending on how you configure your site. Profiles are made up of profile keys, you can configure your site to score against these keys either using the Content Editor/Experience Editor, or programatically.
I'll try to give an example of profiles and patterns below...
A few examples of profiles would be:
1) You might want a gauge a users engagement level - are they just browsing your site at a very shallow level, or are they deeply interacting with your site, i.e completing forms, using tools, adding products to a basket. This would be your user engagement profile, and different types of pages would score differently against this profile.
2) If your site sells a range of products, you might want to know which particular category of product the user is interested in. This would be your product category profile. Each page hit within a particular product category would score a point against the relevant product category profile key.
3) Finally, again using the example of a site that sells products, you might want to know their budget - what price ranges of products is the user looking at? Are they looking at expensive products in the upper range of your products, or are they looking at the lower range. This would be your budget profile. A user viewing cheaply priced products would have a point scored against the low-end budget profile key within the budget profile.
You can then create patterns that you think users will fit in to. This is akin to a "type" of user. Using a fictitious car manufacturer website, a few examples of patterns would be:
1) Expensive taste / 4x4s / low interest. A user that shows low engagement value because they rarely interact further than viewing top-level pages, but is clearly interested in the more expensive end of the product range.
2) Varied budget / family cars / medium interest. A user that browses family cars in different price brackets, has show medium engagement, for example, user may have browsed quite deeply, and downloaded a brochure.
3) Low budget / small cars / high interest. A user that browses small cars in a low budget sector to a high interest level, possibly completing an enquiry, using a configurator etc.
Once you have created your profiles, tagged all your content and created your patterns, Sitecore will place users in to a pattern in real time. You can then use these patterns to personalise your site to target content at that "type" of user.
I'm sure there are others who can explain more eloquently!