This document discusses design patterns and their use in software engineering. It defines what design patterns are, how they are categorized, and provides examples of common design patterns. The document also discusses the benefits of using design patterns, such as enabling reuse and improving communication. However, it notes some drawbacks, such as patterns not leading to direct code reuse and the potential for "pattern overload". It concludes with suggestions for effectively integrating and applying patterns.
3. R
R
R
Motivation
Developing software is hard
Designing reusable software is more
challenging
finding good objects and abstractions
flexibility, modularity, elegance reuse
takes time for them to emerge, trial and
error
Successful designs do exist
exhibit recurring class and object
structures
4. R
R
R
Design Pattern
Describes recurring design structure
names, abstracts from concrete designs
identifies classes, collaborations,
responsibilities
applicability, trade-offs, consequences
5. R
R
R
Becoming a Chess Master
First learn rules and physical requirements
e.g., names of pieces, legal movements, chess
board geometry and orientation, etc.
Then learn principles
e.g, relative value of certain pieces, strategic value
of center squares, power of a threat, etc.
To become a Master of chess, one must
study the games of other masters
These games contain patterns that must be
understood, memorized, and applied repeatedly.
There are hundreds of these patterns
6. R
R
R
Becoming a Software Design Master
First learn rules
e.g., algorithms, data structures, and languages of
software.
Then learn principles
e.g., structured programming, modular
programming, object-oriented programming, etc.
To become a Master of SW design, one must
study the designs of other masters
These designs contain patterns that must be
understood, memorized, and applied repeatedly.
There are hundreds of these patterns
7. R
R
R
Design Patterns
Design patterns represent solutions to
problems that arise when developing
software within a particular context
Patterns == problem/solution pairs in a
context
Patterns capture the static and dynamic
structure and collaboration among key
participants in software designs
Especially good for describing how and
why to resolve non-functional issues
8. R
R
R
Applications
Wide variety of application domains:
drawing editors, banking, CAD, CAE,
cellular network management, telecomm
switches, program visualization
Wide variety of technical areas:
user interface, communications, persistent
objects, O/S kernels, distributed systems
9. R
R
R
Design Pattern Descriptions
Main Parts:
Name and Classification (see table in two more slides)
Intent: Problem and Context
Also known as (other well-known names)
Motivation: scenario illustrates a design problem
Applicability: situations where pattern can be applied
Structure: graphical representation of classes (class diagram, interaction
diagram)
Participants: objects/classes and their responsibilities
Collaborations: how participants collaborate
Consequences: trade-offs and results
Implementation: pitfalls, hints, techniques for coding; language-specific issues
Sample Code
Known Uses: examples of pattern in real systems
Related Patterns: closely related; what are diffs.
Pattern descriptions are often independent of programming language or
implementation details
10. R
R
R
Design Pattern Space
Creational patterns:
Deal with initializing and configuring classes and
objects
Structural patterns:
Deal with decoupling interface and implementation
of classes and objects
Composition of classes or objects
Behavioral patterns:
Deal with dynamic interactions among societies of
classes and objects
How they distribute responsibility
11. R
R
R
Categorize Design Patterns
Characterization
Creational Structural Behavioral
Class Factory Method Adapter (class) Template Method
Bridge (class)
Object Abstract Factory Adapter (object) Chain of Responsibility
Prototype Bridge (object) Command
Singleton Flyweight Iterator (object)
Decorator Mediator
Proxy Memento
Observer
State
Strategy
Comp Builder Composite Interpreter
Fa巽ade Iterator (compound)
Visitor
12. R
R
R
Categorization Terms
Jurisdiction/Scope: domain over which a
pattern applies
Class Jurisdiction: relationships between base
classes and their subclasses
Static semantics
Object Jurisdiction: relationships between peer
objects
Compound Jurisdiction: recusrive object structures
Some patterns apply to multiple jurisdictions.
13. R
R
R
Class Jurisdiction
Class Creational: abstract how objects are instantiated
hide specifics of creation process
may want to delay specifying a class name explicitly when
instantiating an object
just want a specific protocol
Example:
Use of Factory Method: instantiate members in base classes with
objects created by subclasses.
Abstract Application class: create application-specific documents
conforming to particular Document type
Application instantiates these Document objects by calling the
factory method DoMakeDocument
Method is overridden in classes derived from Application
Subclass DrawApplication overrides DoMakeDocument to return a
DrawDocument object
14. R
R
R
Class Jurisdiction
Class Structural: use inheritance to compose protocols
or code
Example:
Adapter Pattern: makes one interface (Adaptees) conform to
another --> uniform abstraction of different interfaces.
Class Adapter inherits privately from an Adaptee class.
Adapter then expresses its interface in terms of the Adaptees.
Class Behavioral: capture how classes cooperate with
their subclasses to satisfy semantics.
Template Method: defines algorithms step by step.
Each step can invoke an abstract method (that must be defined
by the subclass) or a base method.
Subclass must implement specific behavior to provide required
services
15. R
R
R
Object Jurisdiction
Object Patterns all apply various forms of
non-recursive object composition.
Object Composition: most powerful form of
reuse
Reuse of a collection of objects is better
achieved through variations of their
composition, rather than through subclassing.
16. R
R
R
Object Creational
Creational Object Patterns: abstract how sets of objects are
created
Example:
Abstract Factory: create product objects through generic
interface
Subclasses may manufacture specialized versions or compositions
of objects as allowed by this generic interface
User Interface Toolkit: 2 types of scroll bars (Motif and Open Look)
Dont want to hard-code specific one; an environment variable decides
Class Kit: encapsulates scroll bar creation; an abstract factory that
abstracts the specific type of scroll bar to instantiate
Kit: defines protocol for creating scroll bars (and other UI entities)
Subclasses of Kit refine operations in the protocol to return specialized
types of scroll bars.
Subclasses MotifKit and OpenLookKit each have scroll bar operation.
17. R
R
R
Object Structural
Describe ways to assemble objects to realize new
functionality
Added flexibility inherent in object composition due to ability
to change composition at run-time
not possible with static class composition.
Example:
Proxy: acts as convenient surrogate or placeholder
for another object.
Remote Proxy: local representative for object in a different
address space
Virtual Proxy: represent large object that should be
loaded on demand
Protected Proxy: protect access to the original object
18. R
R
R
Object Behavioral
Describe how a group of peer objects cooperate to
perform a task that can be carried out by itself.
Example:
Strategy Pattern: objectifies an algorithm
Text Composition Object: support different line breaking algorithms
Dont want to hard-code all algs into text composition class/subclasses
Objectify different algs and provide them as Compositor
subclasses (contains criteria for line breaking strategies)
Interface for Compositors defined by Abstract Compositor Class
Derived classes provide different layout strategies (simple line breaks,
left/right justification, etc.)
Instances of Compositor subclasses couple with text composition at
run-time to provide text layout
Whenever text composition has to find line breaks, forwards the
responsibility to its current Compositor object.
19. R
R
R
Compound Jurisdiction
Affect Recursive Object Structures
Compound Creational: creation of recursive object
structures
Example:
Builder Pattern: Builder base class defines a generic interface
for incrementally constructing recursive object structures
Hides details of how objects in structure are created,
represented, and composed
Changing/adding new representation only requires defining a
new Builder Class
Clients are unaffected by changes to Builder
20. R
R
R
Compound Jurisdiction Example
RTF (Rich Text Format) Parser for document exchange format:
handle multiple format conversions (ASCII, also be able to edit
in text viewer object)
Make the parser independent of different conversions
Create RTFReader class that takes a Builder object as argument
RTFReader knows how to parse the RTF format and notifies the
Builder whenever it recognizes text or an RTF control word
Builder is responsible for creating corresponding data structure
Builder separates the parsing algorithm from the creation of the
structure resulting from the parsing
Parsing algorithm can be reused to create any number of different
data representations
ASCII builder ignores all notifications except plain text
Text builder uses the notifications to create more complex text
structure
21. R
R
R
Compound Structural
Capture Techniques for structuring recursive object
structures
Example:
Facade Pattern (Wrapper): describes how to flexibly attach
additional properties and services to an object
Can be nested recursively; compose more complex object
structures
User Interface Example:
A Facade containing a single UI component can add decorations
such as border, shadows,scroll bars, or services (scrolling and
zooming)
Facade must conform to interface of its wrapped component and
forward messages to it
Facade can perform additional actions (e.g., drawing border
around component) either before or after forwarding a message.
22. R
R
R
Compound Behavioral
Deal with behavior in recursive object structures
Example:
Iterator Pattern: Iteration over a recursive structure
Traversal strategies for a given structure:
Extract and implement ea traversal strategy in an Iterator class.
Iterators objectify traversal algs over recursive structures
Different iterators can implement pre-order, in-order, post-order
traversals
Require nodes in structure to provide services to enumerate
their sub-structures
Dont need to hard-code traversal algs throughout classes of
objects in composite structure
Iterators may be replaced at run-time to provide alternate
traversals.
23. R
R
R
Creational Patterns
Factory Method:
method in a derived class creates associates
Abstract Factory:
Factory for building related objects
Builder:
Factory for building complex objects incrementally
Prototype:
Factory for cloning new instances from a prototype
Singleton:
Factory for a singular (sole) instance
24. R
R
R
Structural Patterns:
Adapter:
Translator adapts a
server interface for a
client
Bridge:
Abstraction for binding
one of many
implementations
Composite:
Structure for building
recursive aggregations
Decorator:
Decorator extends an
object transparently
Facade:
simplies the interface for
a subsystem
Flyweight:
many fine-grained
objects shared efficiently.
Proxy:
one object approximates
another
25. R
R
R
Behavioral Patterns
Chain of Responsibility
request delegated to the
responsible service
provider
Command:
request is first-class
object
Interpreter:
language interpreter for a
small grammar
Iterator:
Aggregate elements are
accessed sequentially
Mediator:
coordinates interactions
between its associates
Memento:
snapshot captures and
restores object states
privately
Observer:
dependents update
automatically when
subject changes
State:
object whose behavior
depends on its state
26. R
R
R
Behavior Patterns (more)
Strategy:
Abstraction for selecting one of many algorithms
Template Method:
algorithm with some steps supplied by a derived class
Visitor:
operations applied to elements of a heterogeneous object
structure
27. R
R
R
When to Use Patterns
Solutions to problems that recur with variations
No need for reuse if problem only arises in one context
Solutions that require several steps:
Not all problems need all steps
Patterns can be overkill if solution is a simple linear set of
instructions
Solutions where the solver is more interested in the
existence of the solution than its complete derivation
Patterns leave out too much to be useful to someone who
really wants to understand
They can be a temporary bridge
28. R
R
R
What Makes it a Pattern
A Pattern must:
Solve a problem
must be useful
Have a context
describe where the
solution can be used
Recur
relevant in other
situations
Teach
provide sufficient
understanding to tailor
the solution
have a name
referenced consistently
29. R
R
R
Benefits of Design Patterns
Design patterns enable large-scale reuse of
software architectures
also help document systems
Patterns explicitly capture expert knowledge
and design tradeoffs
make it more widely available
Patterns help improve developer
communication
Pattern names form a vocabulary
Patterns help ease the transition to OO
technology
30. R
R
R
Drawbacks to Design Patterns
Patterns do not lead to direct code reuse
Patterns are deceptively simple
Teams may suffer from pattern overload
Patterns are validated by experience and
discussion rather than by automated testing
Integrating patterns into a SW development
process is a human-intensive activity.
31. R
R
R
Suggestions for Effective Pattern Use
Do not recast everything as a pattern
Instead, develop strategic domain patterns and reuse
existing tactical patterns
Institutionalize rewards for developing patterns
Directly involve pattern authors with application
developers and domain experts
Clearly document when patterns apply and do not
apply
Manage expectations carefully.