I. INTRODUCTION
In software development, no matter where we work,
what we are building, or what language we are
programming in, “change” is the one true constant that will
be with us always. A design pattern is a general reusable
solution to a commonly occurring problem in software
design. A design pattern is not a finished design that can be
transformed directly into code. It is a description or template
for how to solve a problem that can be used in many
different situations. Object-oriented design patterns
typically show relationships and interactions between
classes or objects, without specifying the final application
classes or objects that are involved. Many patterns imply
object-orientation or more generally mutable state, and so
may not be as applicable in functional programming
languages, in which data is immutable or treated as such.
Good OO designs are reusable, extensible and
maintainable. Patterns show us how to build systems with
good OO design qualities. Reference [1] lists 23 design
patterns. They are proven object-oriented experience. They
don’t give us codes, they give us general solutions to design
problems. We apply them to our specific application.