Design Patterns: - Iterators Are An Example of A Design Pattern
Design Patterns: - Iterators Are An Example of A Design Pattern
Gang of Four
24
Object Modeling Technique (OMT)
25
Classes
26
Object instantiation
27
28
Pseudo-code and Containment
29
Object diagrams
30
Interaction diagrams
time
31
32
Components of a Pattern
• Name(s)
• Problem
– Context
– Real-world example
• Solution
– Design/structure
– Implementation
• Consequences
• Variations, known uses
33
34
Iterator Pattern
• Consequences:
– Support different and simultaneous traversals
• Multiple implementations of Iterator interface
• One traversal per Iterator instance
– Requires coherent policy on aggregate updates
• Invalidate Iterator by throwing an exception, or
• Iterator only considers elements present at the time of its creation
• Variations:
– Internal vs. external iteration
• Java Iterator is external
35
Internal Iterators
public interface InternalIterator<Element> {
void iterate(Processor<Element> p);
}
public interface Processor<Element> {
public void process(Element e);
}
36
Design Patterns: Goals
37
Underlying Principles
• Sub-goals:
– Program to an interface, not an implementation
– Favor composition over inheritance
– Use delegation
38
Program to Interface, Not Implementation
39
Rationale
40
Favor Composition over Class Inheritance
AClass
• White box reuse: amethod
– Inheritance
BClass
amethod
41
Rationale
42
Delegation
43
Rationale
44
Design Patterns Taxonomy
• Creational patterns
– Concern the process of object creation
• Structural patterns
– Deal with the composition of classes or objects
• Behavioral patterns
– Characterize the ways in which classes or objects
interact and distribute responsibility
45
• Singleton
– Ensure a class only has one instance, and provide a
global point of access to it.
• Typesafe Enum
– Generalizes Singleton: ensures a class has a fixed
number of unique instances.
• Abstract Factory
– Provide an interface for creating families of related or
dependent objects without specifying their concrete
classes.
46
Structural Patterns
• Adapter
– Convert the interface of a class into another interface
clients expect. Adapter lets classes work together that
couldn't otherwise because of incompatible interfaces
• Proxy
– Provide a surrogate or placeholder for another object to
control access to it
• Decorator
– Attach additional responsibilities to an object
dynamically
47
Behavioral Patterns
• Template
– Define the skeleton of an algorithm in an operation,
deferring some steps to subclasses
• State
– Allow an object to alter its behavior when its internal
state changes. The object will appear to change its class
• Observer
– Define a one-to-many dependency between objects so
that when one object changes state, all its dependents
are notified and updated automatically
48
Singleton Objects
• Problem:
– Some classes have conceptually one instance
• Many printers, but only one print spooler
• One file system
• One window manager
– Creating many objects that represent the same
conceptual instance adds complexity and overhead
• Solution: only create one object and reuse it
– Encapsulate the code that manages the reuse
49
50
Singleton pattern
51
53
Marhsalling in Java
Singleton.instance Singleton.instance
55
• Solution: Implement
– Object readResolve() throws ObjectStreamException;
• This method will be called after standard unmarshilling
• Returned result is substituted for standard unmarshalled result
56
Generalizing Singleton: Typesafe Enum
• Problem:
– Need a number of unique objects, not just one
– Basically want a C-style enumerated type, but safe
• Solution:
– Generalize the Singleton Pattern to keep track of
multiple, unique objects (rather than just one)
57
Enum
Enum EnumOp ()
data
static Enum inst1
static Enum inst2
EnumOp ()
Enum
data EnumOp ()
data
Note: constructor is private
58
Typesafe Enum: Example
public class Suit {
private final String name;
59
60
Adapter (aka Wrapper) Pattern
• Problem:
– You have some code you want to use for a program
– You can’t incorporate the code directly (e.g., you just
have the .class file, say as part of a library)
– The code does not have the interface you want
• Different method names
• More or fewer methods than you need
61
62
Adapter Pattern (cont’d)
63