Design pattern (computer science) |
Design patterns are recurring solutions to problems in object-oriented design. The
phrase was introduced to computer science in the 1990s by the text Design
Patterns: elements of reusable object-oriented software. The scope of the term remained a matter of dispute into the
next decade. Algorithms are not thought of as design patterns, since they solve
implementation problems rather than design problems. Typically, a design pattern is thought to encompass a tight interaction of a
few classes and objects.
Professor Christopher Alexander's work on a pattern language, for designing buildings and communities, was the
inspiration for the design patterns of software.
Interest in sharing patterns in the software community has led to a number of books, symposiums, and the formation of Ward Cunningham's original wiki. The
goal of pattern literature is to make the experience of past designers accessible to beginners and others in the field. A book of
design patterns presents different solutions in a common format, to provide a language for discussing design issues.
Pattern Format
The design pattern format has four essential parts, although names and ordering differ by source:
Name
Every pattern needs a name, to provide a vocabulary for design discussion.
Problem
Recurring circumstances lead to the discovery of this pattern by multiple persons. A primary goal of design is to limit the
amount of source change needed to change a program's observed behavior, but this can be difficult to achieve if a designer does
not understand the implications of a design.
Solution
The solution is described sufficiently for implementation by novices, although the implementation is usually given in general
enough terms that it can be adapted to different projects.
Consequences
Applying this solution will effect the rest of the project in certain ways, so it is important to mention any common negative
or serendipitous side-effects.
Similar Terms
Poor (yet unfortunately common) solutions to common problems are sometimes known as anti-patterns.
See also: amelioration pattern, Model view controller triad
A List of Design Patterns
Fundamental patterns
Creational patterns
Structural patterns
Behavioral patterns
Critique
Some feel that the need for patterns results from using computer languages or techniques with insufficient abstraction
ability. Under ideal "factoring", a concept should not be copied, but merely referenced. But if something is referenced instead
of copied, then there is no "pattern" to label and catalog. It is also said that Design Patterns encourage navigational database-like structures instead of the allegedly
cleaner relational approach where such structures are viewpoints instead of hard-wired into programming code. However, critics of
the relational approach suggest that it does not integrate well enough with behavior. The level of coupling that should be
supplied between behavior and data is a contentious topic.
Related Topics
References
- Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides: Design
Patterns, Addison-Wesley, 1995, hardcover, 395 pages, ISBN 0201633612, Design Patterns
CD, 1997 ISBN 0201634988
- Frank Buschmann,
Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal: Pattern-oriented
Software Architecture, Volume 1: A System of Patterns, John Wiley & Sons Ltd., ISBN 0471958697
- Douglas C.
Schmidt: Pattern-oriented Software Architecture. Volume 2: Patterns for Concurrent and Networked Objects, John
Wiley & Sons Ltd., ISBN
0471606952
- Alan Shalloway, James R. Trott: Design Patterns
Explained: A New Perspective on Object-Oriented Design, Addison-Wesley, ISBN 0201715945
- Martin Fowler: Patterns of Enterprise Application
Architecture, Addison-Wesley, ISBN
0321127420
- Douglas C.
Schmidt, Stephen D.
Huston: C++ Network Programming: Mastering Complexity Using ACE and Patterns, Addison-Wesley, ISBN 0-201-60464-7
External links
|