I'd like to emphasise that there are NO DESIGN PATTERNS in this book - don't let the title confuse you. No doubt the word "Patterns" was kept for volume 2 because it's fashionable, but it isn't a very obvious description of what the book does contain.
A better description would be that the book is a collection of tips and advice on various subjects, including code robustness, UI design, good OO practice, optimization and testing.
However, if you want good and thorough coverage of any one of the topics in the book, you will be better looking at books and articles dedicated to that subject. If, on the other hand, you are an apprentice programmer looking for a general all-round treatment of good Java practices, this book does not provide it.
The selection of items included has no coherence. It varies wildly in many aspects, such as -
* Level: some items (like, "Use symbolic names for numeric constants") are at novice level, whereas others (Hashed Adapter Objects) are quite advanced.
* Type of coverage: some items advise on general coding style, others provide detailed code examples to solve very specific problems, and yet others describe approaches to coding without giving any suggestions about implementation whatsoever.
* Subject choice: there is no coherence to the subjects covered, which have nothing to do with each other, nor to the coverage within each of those subjects, which would be far better described with an integrated discussion than a random selection of tidbits.
The other huge problem with the book is its lack of clarity. It follows the same technique as Volume 1, dividing each section into Synopsis, Context, Forces, Solution, Consequences, etc. I actually think this division had some value in Volume 1, but it doesn't in most of the items here. All it achieves that tips like "Don't put magic numbers in your code, use symbolic constants," or "Break an over-long method into several smaller methods," that could be expressed in one sentence with at most a brief code example, suddenly take 4 pages to explain.
Furthermore, much of the explanation is very abstract, and this makes it hard to follow. There is quite a thorough explanation of testing practices, but it won't make any sense to you unless you are already familiar with the approaches being described. (In which case, of course, you don't need to read it.) And the section on testing also contains no code examples nor suggestions of how to actually implement, say, unit tests. (The immensely useful JUnit isn't mentioned.)
Worse still, in one or two places the advice is rather outdated. Double-checked locking seems to have been discredited, or at the very least is controversial, whilst there is no suggestion to consider using type-safe object-based constants when symbolic constants are needed.
Maybe these last two complaints are a little unfair, as I'm not sure these developments were well known when the book was released. Nonetheless it shows that it is rapidly being overtaken by events.
This book does not provide a particularly good selection of advice, nor is the advice it gives well written. It just looks like an attempt to cash in on the Patterns bandwagon by scraping together any material that the author could think of, and is certainly not worth the cover price.