I've been browsing around for some good resources to get my head in to this type of design. I'd like to see if anyone has any good resources to get them in to this design mode. While I am targeting PHP, I am also learning Java, and the principal is pretty much the same between the two languages. So I'd like to point out Thinking in Java. This resource is actually free and available for download here!
I feel a little upset that this topic doesn't receive a little more attention, especially as new aspiring developers come to SP looking for assistance, they may begin to write their code out procedurally, and then have a harder time transitioning over.
Kyle, I changed the link in your post. The 4th edition is not free, as you can read on the site the link now links to. The 3rd is.
Presumably you are looking for online material, rather than books.
There is always the sticky Advanced PHP Resources, which is looking a bit dated now.
(we really could do with a sticky which contained assessments of PHP OOP books, and other lang OOP books, we seem to have written so much on here about the books we like and prefer)
So, if you want online resources I always end up referring to, then they would include:
C2 Patterns Library (the 'grandaddy' site)
5 Common PHP Patterns (IBM)
Design Patterns in Dynamic Programming (norvig)
A Catalog of Design Pattern Shorts (dikini.net)
Build 7 Good Object-oriented habits in PHP (IBM)
You will find the main patterns in most of that list, but how each author explains it, or the examples they use or how their implementations are all slightly different I find is very useful. When faced with a problem I very often find a pattern that I think will fit, but the examples just dont seem to dovetail with my imagined solution and I just cannot make the connection.
Having an array of fairly similar examples illustrating the same solution often causes one of them to snap something in my head and I "get it". I can remember the Observer being a difficult one to get my head around, and fiddling with code from the IBM example suddenly sparked something and it ended up an ideal fit for the problem I had suspected would benefit from using an Observer.
The last one isn't really a pattern library, just something to read, and re-read as a kind of touchstone, break the rules (guideline) if you think you know the reasons why you are doing so, but don't do it casually or by accident.
I often end up in Martin Fowlers Catalog of Patterns of Enterprise Application Architecture as a quick way of cross-referencing different Models, but it makes little sense if you do not have (or have not read the first half of) his book POEAA.
Sometimes looking at a ULM diagram will do it for me, other times, not.
I can remember very clearly learning the Strategy Pattern (when reading Head First Design Patterns) and for ages afterwards a Strategy seemed to be the solution to just about every problem I came across. I knew that must have been wrong, but I have to say that feeling still persists, it is just so useful.