PART I
I.Constant Change
You must be the change you wish to see in the world.
—Mohandas Gandhi
They must often change, who would be constant in
happiness or wisdom.
—Confucius
Without change, something sleeps inside us, and
seldom awakens. The sleeper must awaken.
—Frank Herbert
Life belongs to the living, and he who lives must be
prepared for changes.
—Johann Wolfgang von Goethe
If we had to summarize design patterns in a single sentence, we’d say that they’re
tools for coping with constant changein software design and development. When you
look at the different design patterns in this book, they’re optimized to allow the pro-
grammer to make changes and reuse most of the software developed. The key con-
cepts are change and flexibility. That same theme will be repeated throughout the
book. This Part I provides a general guide for understanding and using this book.
To work with design patterns, you need to know basic object-oriented programming
(OOP) principles. If you’re not familiar with these concepts, spend some quality time
with Chapter 1. The latter part of Chapter 1 gets into some of the design pattern
principles, and understanding these concepts will help you better understand the
chapters covering the individual design patterns.
If you use and understand the basic OOP concepts such as abstraction, encapsula-
tion, inheritance and polymorphism, you won’t necessarily be a good OOP designer.
As a professional designer and developer, you need to design software that’s easy to
maintain and flexible enough to accept change. In other words, you need to develop
software that reflects the real world. Any tool you use on the Web today must have
the capacity to easily change, be updated, and be reused. Otherwise, the software
lacks the capacity to adapt to real world usage.