This book provides an evenly paced exploration of some of the more common design patterns, explaining the concepts they encapsulate and scenarios to which they may be applied. The book is clearly laid out and clearly written in a deliberately informal style. A large part of the book takes the reader on a quest for a robust design to a real-world example requirement. The authors use the weaknesses of an initially fragile, pattern-free design to introduce, explain and apply one pattern after another. However, that is not the end of the journey; later chapters encourage thinking in patterns and consider higher-level design techniques, for example rules of thumb suggesting the most appropriate order in which relevant patterns may be applied to a given problem. These later chapters introduce design principles more often learnt 'on the job' by osmosis from colleagues or personal experience and are well worth reading.
The material in this book is well formatted and presented. In keeping with the book's introductory nature the content is deliberately broad rather than deep, but the authors still present valuable insights in an accessible manner. Not really a book for C++ gurus, but a well presented and well though out introduction to patterns for those of us who find the GoF patterns bible intriguing but hard to apply.