Foreword
Preface
1 INTRODUCTION TO PATTERNS
Why Patterns?
Why Design Patterns?
Why Java?
Why UML?
Why a Workbook?
The Organization of This Book
Welcome to Oozinoz!
Source Code Disclaimer
Summary
PART I INTERFACE PATTERNS
2 INTRODUCTING INTERFACES
Ordinary Iterfaces
Interfaces and Obligations
Placing Constants in Interfaces
Summary
Beyond Ordinary Interfaces
3 ADAPTER
Adapting in the Presence of Foresight
Class and Object Adapters
Unforeseen Adaptation
Recognizing ADAPTER
Summary
4 FACADE
Refactoring to FACADE
Facades,Utilities,and Demos
Summary
5 COMPOSITE
An Ordinary Composite
Recursive Behavior in Composites
Trees in Graph Theory
Composites with Cycles
Consequences of Cycles
Summary
6 BRIDGE
A Classic Example of BRIDGE:Drivers
Refactoring to BRIDGE
A Bridge Using the List Interface
Summary
PART II RESPONSIBILKITY PATTERNS
7 INTRODUCING RESPONSIBILITY
Ordinary Responsibility
Controlling Responsibility with Visiblity
Summary
Beyond Ordinary Responsibility
8 SINGLETON
SINGLETON Mechanics
Singletons and Threads
Recognizing SINGLETON
Summary
9 OBSERVER
A Classic Example:OBSERVER in Swing
Model/View/Controller
Maintaining an Observable Object
Summary
10 MEDIATOR
A Classic Example:GUI Mediators
Relational Integrity Mediators
Summary
11 PROXY
A Classic Example:Image Proxiers
Image Proxies Peconsidered
Remote Proxies
Summary
12 CHAIN OF RESPONSIBILITY
Varieties of Lookup
Refactoring to CHAIN OF RESPONSIBILITY
Anchoring a Chain
CHAIN OF RESPONSIBILITY without COMPOSITE
Summary
13 FLYWEIGHT
Recognizing FLYWEIGHT
Immutability
Extracting the Immutable Part of a Flywight
Sharing Flyweights
Summary
PART III CONSTRUCTION PATTERNS
14 INRODUCING CONSTRUCTION
Ordinary Construction
Supercalss Collaboration
Collaboration within a Class
Summary
Beyond Ordinary Construction
15 BUILDER
Building from a Parser
Building under Constraints
Building a Counteroffer
Summary
16 FACTORY METHOD
Recognizing FACTORY METHOD
A Classic Exapmle of FACTORY METHOD:Iterators
Taking Control of Which Class to Instantiate
FACTORY METHOD in Parallel Hierarchies
Summary
17 ABSTRACT FACTORY
Abstract Factories for Families of Objects
Packages and Adstract Factories
Abstract Factories for Look-and-Feel
Summary
18 PROTOTYPE
Prototypes as Factories
Prototyping with Clones
Using Object.clone()
Summary
19 MEMENTO
Memento Durability
Applying Memento
Persisting Mementos across Sessions
Using Strings as Mementos
Summary
PART IV OPERATION PATTERNS
20 INTRODUCING OPERATIONS
Operations,Methods,and Algorithms
The Mechanics of Methods
Exceptions in Methods
Summary
Beyond Ordinary Operators
21 TEMPLATE METHOD
A Classic Example of TEMPLATE METHOD:Sorting
Completing an Algorithm
TEMPLATE METHOD Hooks
Refactoring to TEMPLATE METHOD
Summry
22 STATE
Modeling States
Refactoring to STATE
Making States Constant
Summary
23 STRATEGY
Modeling Strategies
Refactoring to STRATEGY
Comparing STRATEGY and STATE
Comparing STRATEGY and TEMPLATE METHOD
Summary
24 COMMAND
A Classic Example:Menu Commands
Using COMMAND to Supply a Service
COMMAND in Relation to Other Patterns
Summary
25 INTERPRETER
An INTERPRETER Example
Interpreters,Languages,and Parsers
Summary
PART V EXTENSION PATTERNS
26 INTRODUCING EXTENSION
Reuse as an Alternative to Extension
Extending by Subclassing
The Liskov Substitution Principle
Extending by Delegating
Summary
Beyond Ordinary Extension
27 DECORATOR
A Classic Example of DECORATOR:Streams
Function Decorators
Decorating without DECORATOR
Summary
28 ITERATOR
Type-Safe Collections
Iterating Over a Composite
Thread-Safe Iterators
Summary
29 VISITOR
Supporting VISITOR
Extending with VISITOR
VISITOR Cycles
VISITOR Controversy
Summary
PART VI APPENDIXES
A APPENDIX A:DIRECTIONS
B APPENDIX B:SOLUTIONS
C APPENDIX C:UML AT A GLANCE
Glossary
Bibliography