Names of design patterns appear in small capitals: e.g., Adapter. Page numbers in bold indicate the definition of a term. Numbers in italics indicate a diagram for the term. Letters after a diagram's page number indicate the kind of diagram: a "c" denotes a class diagram, an "i" denotes an interaction diagram, and an "o" denotes an object diagram. For example, 88co means that a class and object diagram appears on page 88.

A

abstract class 15, 16c, 359, 364, 365c
abstract coupling, see coupling, abstract
in Observer 296
Abstract Factory 87
extensibility of 91
in catalog summary 8
Lexi's use of 51
used to configure a subsystem 193
Abstract Factory
participant of Abstract Factory 88c, 89
abstract operation, see operation, abstract
use to implement Adapter 144
abstract syntax tree 244, 251, 331
class structure for 244c, 331c
constructing in Smalltalk 250
object structure for 244o
AbstractExpression
participant of Interpreter 245c, 245
Abstraction
participant of Bridge 153c, 154
AbstractProduct
participant of Abstract Factory 88c, 89
accumulating state 336
acquaintance 22, 359
C++, defined in 23
compared with aggregation 23
Smalltalk, defined in 23
Action, see Command
active iterator, see iterator, active
Ada 4, 21
Adaptee
participant of Adapter 141, 141c
Adapter 139
compared with Bridge 161, 219
compared with Decorator 184
compared with Proxy 216
in catalog summary 8
Adapter
participant of Adapter 141, 141c
adapter 140
class adapter 141, 141c
object adapter 141, 141c
parameterized 145
pluggable, see pluggable adapter
two-way 143, 143c
adorner 179
Aggregate
participant of Iterator 259, 259c
aggregate object 257
aggregation 22, 359
C++, defined in 23
compared with acquaintance 23
notation for 23
Smalltalk, defined in 23
Alexander, Christopher xiii, 2, 356, 358
algorithm
avoiding dependence on 24
defining steps of 326
family of 317
skeleton 327
AlternationExpression 244co, 343
implemented in Smalltalk 249
aluminum alloy 76
Ambassador, see also Proxy
C++ idiom 208
AnalogClock 303
analysis object model
transforming to design object model 353
ancestor class 361, see also class, parent
Anderson, Bruce xi, 357
AndExp 253
Andrew Toolkit
use of Observer 303
Application 107, 107c, 223o, 224ci, 231, 325, 325c
application programs 25
ApplicationWindow 53, 54c, 55c, 157, 233c, 234c
ArrayCompositor 42c, 315, 315c, 322
ASCII7Stream 183, 183c
aspect of an object 298
AssignmentNode 333c
associations, see also acquaintance, aggregation
in OMT 364

B

BTree 202
base class, see class, parent
Beck, Kent xi, 357
Bedrock
use of Decorator 179, 180
behavioral pattern 10, 221
comparison between class and object scope 221
discussion 345
black-box reuse, see reuse, black-box
block, Smalltalk 270
BNF form 247
examples of 243, 248, 251
BombedMazeFactory 93
BombedMazeGame 115
BombedWall 93, 94, 124
Booch Components
use of Iterator 270
use of Strategy 323
Booch, Grady xiii, 260
Booch method 363
Boolean
expression 251
variable 254
BooleanExp 252
Border 44, 45c, 46o
BorderDecorator 176o, 176c, 180
Bridge 151
compared with Adapter 219
configured by Abstract Factory 155
in catalog summary 8
Lexi's use of 58
use of delegation in 21
bridge 152
broadcast communication 296
Builder 97
compared with Abstract Factory 105, 135
compared with Prototype 135
in catalog summary 8
use in compiler example 189
Builder
participant of Builder 98, 98c
Bureaucrat 232, see also Chain of Responsibility
Button 50c, 223o, 224ci, 229, 279

C

C 4
Calder, Paul 33, 38
callback function 235
Caretaker
participant of Memento 285, 285c, 286i
Cargill, Tom 308
Chain of Responsibility 223
combined with Composite 166, 232
compared with Mediator 348
compared with Observer 348
defined by parent references 166, 232
in catalog summary 8
use of delegation in 21
ChangeManager 282, 299, 300c
Character 38, 38c
character
represented as object 38, 195196
Cheshire Cat 155
Choices operating system
use of Facade 192
use of Proxy 209
class 14, 359
abstract, see abstract class
adapter, see adapter, class
compared with type 16
concrete, see concrete class
derived 360
friend, see friend class
inability to alter 24
inheritance, see inheritance
instance 15
library, see toolkit
mixin, see mixin class
notation for 15, 363
parent 15, 361
subclass 15
template, see template
class diagram 363, 365c, 359
class hierarchy
adding operations to 356
connecting parallel 109, 258
explosion 25, 43, 151, 177
minimizing size of 113, 120, 177, 277, 317, 348
visiting multiple 336
class operation 359
alternatives provided by Singleton 128
Client
participant of Abstract Factory 88c, 89
participant of Adapter 141, 141c
participant of Builder 98, 98c, 99i
participant of Chain of Responsibility 225ci, 226, 348i
participant of Command 236, 236c, 237i
participant of Composite 164c, 165
participant of Flyweight 198c, 199
participant of Interpreter 245c, 246
participant of Prototype 119, 119c
client 11
isolating concrete classes from 89
ClockTimer 302
clone operation 117
used in Prototype 117
implementing 121
cloned object 117
initializing 121
CLOS 4, 260, 338
closure 260, 267
Coad, Peter 357
code structure
run-time versus compile-time 23
CodeGenerationVisitor 332c
Colleague
communicating with Mediator 278, 282
participant of Mediator 276co, 277, 348i
Command 233
combined with Memento 239, 287
combined with Prototype 238
in catalog summary 8
use in Lexi 64
Command 60, 61c, 233, 233c, 239
configured in MenuItem 61
history of 62
participant of Command 236, 236c, 237i, 347i
command
C++ idiom, see functor
copying before execution 238
history, see history list
implemented through C++ templates 239, 240
intelligence of 238
common vocabulary 352
communication
encapsulated or distributed 346
between Strategy and Context 318
between Visitor and Element 337
compilation dependencies
reducing using Facade 188
Compiler 185, 186c, 191
compiler
example in Facade 185, 186c, 188
implemented using Visitor 331
Smalltalk, see RTL Smalltalk compiler
Component
participant of Composite 164c, 165, 168
participant of Decorator 177, 177c
Composite 163
caching children of 169
child management 167
combined with Interpreter 255
combined with Iterator 262
combined with Visitor 339
compared with Decorator 219220
compared with Interpreter 247
data structure for 169, 170
in catalog summary 8
interface of 167
Lexi's use of 40
parent references 166
sharing components 166
use in Model/View/Controller 5
Composite
participant of Composite 164c, 165, 165o, 168
CompositeEquipment 171
Composition 41, 42c, 315, 315c, 320
composition, see object composition
Compositor 41, 42, 315, 315c, 321
interface 41
CompressingStream 183c, 184
concrete class, 15, 359
avoiding specification of 24
isolating clients from 89
ConcreteAggregate
participant of Iterator 259, 259c
ConcreteBuilder
participant of Builder 98c, 99, 99i
ConcreteCommand
participant of Command 236, 236c, 238
ConcreteComponent
participant of Decorator 177, 177c
ConcreteDecorator
participant of Decorator 177c, 178
ConcreteElement
participant of Visitor 334, 334c, 335i
ConcreteFactory
participant of Abstract Factory 89
ConcreteFlyweight
participant of Flyweight 198co, 199
ConcreteHandler
participant of Chain of Responsibility 225c, 226
ConcreteImplementor
participant of Bridge 153c, 154
ConcreteIterator
participant of Iterator 259, 259c
ConcreteObserver
participant of Observer 294c, 295, 295i
ConcreteProduct
participant of Abstract Factory 88, 89
participant of Factory Method 108, 108c
ConcretePrototype
participant of Prototype 119, 119c
ConcreteState
participant of State 307, 307c
ConcreteStrategy
participant of Strategy 316c, 316
ConcreteSubject
participant of Observer 294c, 295, 295i
ConcreteVisitor
participant 334, 334c, 335i
conditional statements
avoiding using State 307
avoiding using Strategy 317
consolidation phase of lifecycle 353
constraint solving 282, 283
see also ThingLab, QOCA
ConstraintSolver 283284, 288
constructor 360
Context 252
participant of Interpreter 245c, 246
participant of State 306, 306c
participant of Strategy 316c, 316
control flow
encapsulating, see Mediator
inversion of 27
Coplien, James 125, 153, 160, 242, 313, 357
copy
deep 121
on write 210
shallow 121
CountingMazeBuilder 104
coupling 360
abstract 188, 278, 296, 359
loose 24, 26, 277, 347, see also decoupling
reducing 24, 187, 188, 223, 226
tight 24
CreateMaze operation 84
Abstract Factory variant (C++) 92
Abstract Factory variant (Smalltalk) 94
Builder variant 102
Factory Method variant 114
Prototype variant (Smalltalk) 123, 125
creational pattern 10, 81
discussion of 135
Creator
participant of Factory Method 108, 108c
implementation of 111, 113
Cursor, see Iterator
cursor, see iterator, cursor

D

data member 360
DebuggingGlyph 182
Decorator 175
compared with Adapter 175, 184
compared with Composite 44, 173, 219220
compared with Proxy 216, 219220
compared with Strategy 179
in catalog summary 8
Lexi's use of 45c, 46o, 47
lightweight versus heavyweight 179
Decorator 176, 180
participant of Decorator 177, 177c, 180o
decorator 175
decoupling, see also coupling, loose
interface and implementation 154
senders and receivers 346
deep copy, see copy, deep
delegate 20, 144
delegation 20, 278, 360
compared with inheritance 2021
implementing pluggable adapters with 144
patterns that rely on 21
dependency 293
managing complex 299
Dependents, see Observer
derived class, see class, derived
design
dj-vu 2
density 358
documenting with patterns 27, 352
for change 23
poetry of 356
for reuse 23
design object model 353
design pattern 360
adjunct to design methodology 353
aspects of design varied by 30
benefits 351
catalog summary 8
catalog template 6
classification 10
compared with frameworks 28
diagram of relationships 12
documenting designs with 27, 352
essential elements 3
finding 355
history of 355
how to use 29
purpose 10
refactoring with 353
scope 10
selection of 28
table of 10
destructor 360
ensuring iterator's is called 266
Dialog 223, 231
DialogDirector 274o, 275ci, 278
DialogWindow 53, 54c, 55c
DigitalClock 302
Director
participant of Builder 98c, 99, 99i
DirectoryBrowser 144, 144c, 145c
discretionary glyph 75
dispatch
double 338
multiple 339
single 338
Doc 205, see also Lexi
Document 107, 107c, 233c, 234, 234c, 325, 325c
document
color 42, 322
formatting 40
logical structure 40
physical structure 35
documenting design with patterns 27, 352
doesNotUnderstand message
used to implement Chain of Responsibility 229
used to implement Proxy 212, 215
Domain 192, 192c
Door 82c, 83
extensions for Prototype 123
double-dispatch, see dispatch, double
downcast 91
Dylan 4
use of Memento 289
dynamic binding 14, 360
dynamic inheritance 309
dynamic_cast in C++ 91, 168

E

e-mail address
reaching the authors xii
Eiffel 17, 21
Element
participant of Visitor 334, 334c
encapsulation 11, 360
breaking with inheritance 19
breaking with Visitor 337
preserving boundaries of 286
of algorithms, see Strategy
of complex update semantics, 299, see also ChangeManager
of concept that varies 29, 54
of document analysis and traversal 71
of protocol between objects, see Mediator
of how objects are created, see Abstract Factory, Builder,
Prototype
of traversal, see Iterator
of requests 59, see also Command
of state-specific behavior, see State
EnchantedMazeFactory 93
envelope-letter idiom 313
Equipment 170, 340
EquipmentVisitor 341
error accumulation
avoiding during undo/redo 239
ET++
use of Abstract Factory 95
use of Adapter 126, 148
use of Bridge 160
use of Builder 105
use of Chain of Responsibility 232
use of Composite 172
use of Command 242
use of Decorator 182, 183
use of Facade 192
use of Factory Method 115
use of Flyweight 206
use of Iterator 261
use of Mediator 281
use of Observer 303
use of Prototype 120, 125
use of Proxy 216
use of Strategy 322323
ET++SwapsManager
use of Strategy 323
ETgdb 125
expansion phase of lifecycle 353, 354
explosion, see class hierarchy, explosion
ExtendedHandler 228
external iterator, see iterator, external
extrinsic state, see state, extrinsic

F

Facade 185
compared with Mediator 193, 282
in catalog summary 8
use in Choices 192
Facade
participant of Facade 185c, 187, 187c
facade 185
Factory Method 107
in catalog summary 8
language-specific variants 112
parameterized with product identifier 110
used to implement Abstract Factory 90, 91, 110
used to create an iterator 258
FileStream 183, 183c
Flyweight 195
combined with Composite 167, 200
combined with Interpreter 247
combined with State 308
in catalog summary 9
Lexi's use of 39
participant of Flyweight 198, 198co
flyweight 196, 196o
managing shared 200
FlyweightFactory 204
participant of Flyweight 198co, 199
FontDialogDirector 274, 274o, 275ci
Foote, Brian 353
forwarding requests 229
framework 26, 360
compared with design patterns 28
documenting with patterns 27
graphical editor 117
see Bedrock
see Choices
see ET++
see HotDraw
see MacApp
see NEXTSTEP
see NeXT AppKit
see RApp
see RTL Smalltalk compiler
see Unidraw
trade-offs associated with 27
Fresco 344
friend class 360
used to grant Iterator privileged access to collection 262
used to support Memento 287
functor 242
future cash flow 323

G

gdb 126
generics 21
Glyph 38, 38c, 42c, 43o, 45c, 46o, 50c, 54c, 67c
implemented as a flyweight 201204
interface 39
interface for traversal 66
Glue, see Facade
GlyphArrayIterator 67, 67c
GNU gdb 126
grammar 243
maintaining complex 247
Graphic 163c, 208c, 213
GraphicTool 117, 118c
guaranteed receipt of request 226
GUIFactory 49, 50c, 51

H

Hamlet 1
Handle/Body, see also Bridge
C++ idiom 155, 160
Handler
participant of Chain of Responsibility 225, 225ci, 348i
hardware platform
isolating application from 24
help
context-sensitive 223
on-line 223
HelpHandler 224, 224c, 227, 229
history list 6264, 238
copying commands onto 238
Hollywood principle 327
hook operation 326, 328
in Abstract Factory 109
in Factory Method 109
in Proxy 212
in Template Method 326, 328
HotDraw
use of State 313
hub of communication 274
hyphenation 64

I

IconWindow 53, 54c, 151152, 151c, 157
Image 207o, 208c, 213
ImageProxy 207o, 208c
Implementor
participant of Bridge 153c, 154
implicit receiver, see receiver, implicit
incremental changes 287
inheritance 15, 360
C++, defined in 17
class versus interface 16
combined with polymorphism 18
compared with object composition 18, 178
compared with parameterized types 21
dynamic 309
Eiffel, defined in 17
implementation 17, 360
interface 17, 360
mixin, see mixin class
notation for 15, 364, 365c
proper use of 18
reuse through 18
Smalltalk, defined in 17
inorder traversal, see traversal, inorder
instance, see also class, instance
ensuring uniqueness, see Singleton
variable 15, 360
instantiation 15
abstracting process of 48
notation for 15, 364, 365c
integrated circuit 323
interaction diagram 7, 366
in Builder 99i
in Chain of Responsibility 224i, 348i
in Command 237i, 347i
in Mediator 274i, 348i
in Memento 286i
in Observer 295i, 347i
in Visitor 335i
Lexi's Visitor 74i
interface 13
benefits of programming to 18
bloat 257
conversion, see Adapter
for iteration 262
inheritance 13, 17
narrow versus wide in Memento 285
specifying in C++ 17
simplifying subsystems, see Facade
internal iterator, see iterator, internal
Interpreter 243
combined with Composite 255
combined with Visitor 247, 255
in catalog summary 9
InterViews
use of Abstract Factory 95
use of Adapter 148
use of Command 242
use of Composite 172
use of Decorator 182
use of Flyweight 205
use of Observer 303
use of Singleton 133
use of Strategy 320, 322323
intrinsic state, see state, intrinsic
inversion of control flow 27
invitation 358
Invoker
participant of Command 236, 236c, 237i, 347i
IRIS Inventor
use of Visitor 344
Iterator 257
combined with Composite 362
combined with Visitor 339
compared with Visitor 336
in catalog summary 9
use in Lexi 69
Iterator 67, 67c, 258c, 263, 372
participant of Iterator 259, 259c
iterator 66, 257, 339
access to aggregate 262
active 260
alternative to in Smalltalk 270
controlling 260
cursor 261
ensuring deletion of 266
external 260, 339, 269
interface to 261, 263
internal 260, 267, 339, see also ListTraverser
null 262, see also NullIterator
over recursive structures 262
parameterized with an operation 267
passive 260
polymorphic 258, 261, 265
privileged access to Aggregate 262
robust 261

K

Kit, see also Abstract Factory
in InterViews 95
Knuth, Donald 357

L

lazy initialization 112
Leaf
participant of Composite 164c, 165, 165o, 168
Lempel-Ziv compression 183
Lexi 33
document structure 35
document traversal and analysis 64
look-and-feel standards 47
multiple window systems 51
user interface 33, 34
user operations 58
libg++
use of Bridge 160
lifecycle of software 353, 354
Linton, Mark 344
List 257, 257c, 258c, 263, 369
list box 274
list traversal 257
ListBox 274o, 275ci, 279
ListIterator 67, 257, 257c, 258c, 264, 372
ListTraverser 267
LiteralExpression 244co, 344
implemented in Smalltalk 250
look-and-feel standards 87
support in Lexi 35, 47

M

MacApp
use of Chain of Responsibility 232
use of Command 242
use of Decorator 179, 180
use of Factory Method 113, 115
Macbeth 1
MacFactory 50c
Macintosh 48, 52
MacroCommand 235, 235c, 241
magic token 346
Manipulator 109, 110c
MapSite 82, 82c
Marriage of Convenience 149
Maze 82c, 84
MazeBuider 101
MazeFactory 92
as singleton 133
MazeGame 84, 114
MazePrototypeFactory 122
Mediator 273
combined with Observer 299
compared with Chain of Responsibility 348
compared with Facade 282
compared with Observer 346, 348
in catalog summary 9
use of delegation in 21
Mediator
communicating with Colleague 278, 282
participant of Mediator 276co, 277, 348i
omitting abstract class of 278
mediator 274
member function 361, see also operation
Memento 283
in catalog summary 9
Memento
combined with Command 239, 287
participant of Memento 285, 285c, 286i
memento 284
costs associated with 286
language support for 287
MemoryStream 183
Menu 50c, 233c
menu 233
configuring 60, 234
pull-down 58
MenuItem 59, 61c, 233, 233c
metaclass 133, 361
method 361, see also operation
Microsoft Windows 52
mixin class 16, 16c, 361
Model/View/Controller 4, 5
use of Composite 5, 172
use of Factory Method 115
use of Observer 5, 303
use of Strategy 6
MonoGlyph 44, 45c
Motif 35, 47, 48, 49, 51, 87
MotifFactory 49, 50c
multiple dispatch, see dispatch, multiple
multiple inheritance, see also mixin class
used to implement class adapter 141
used to implement Bridge 156
MVC, see Model/View/Controller
Meyer, Bertrand 149

N

naming conventions 29, 31
Factory Method 31, 113
Template Method 329
Visitor 337
NeXT AppKit
use of Adapter 149
use of Bridge 160
use of Chain of Responsibility 232
use of Template Method 329
NEXTSTEP
use of Adapter 145
use of Proxy 208, 212, 216
Node 333c
NodeVisitor 332c
nonterminal symbol 246
NonTerminalExpression
participant of Interpreter 245c, 246
notification 294
null iterator, see iterator, null
NullIterator 67c, 6768, 262
NXProxy 208, 212

O

object 11, 361
adapter, see adapter, object
acquaintance 22
aggregation 22
as argument to request 345
aspect of 298
avoiding dependence on implementation of 24
composition, see object composition
finding 11
granularity of 13, see also Flyweight
guts 179
reference 361
shared, see Flyweight
skin 179
specifying implementation of 14
specifying interface to 13
object composition 18, 361
compared with inheritance 1820
compared with parameterized types 22
reuse through 19
object diagram 364, 361
Objects for States, see State
Object Modeling Technique 7, 14, 363, 364
Objective C 90, 120, 121, 135, 144
Objectory 363
ObjectWindows
use of Iterator 270
use of Strategy 323
ObjectWorks\Smalltalk, see also Smalltalk
use of Adapter 148149
use of Decorator 182
use of Facade 191
Observer 293
combined with Mediator 278, 282
compared with Chain of Responsibility 346, 348
compared with Mediator 346, 348
in Model/View/Controller 5
in catalog summary 8
limiting unexpected updates in 296
Observer 300
combining with Subject 300
participant of Observer 294c, 295, 295i, 300c, 347i
OMT, see Object Modeling Technique
operation 11, 361
abstract 15, 359
adding to classes 335
avoiding dependence on specific 24
class, see class operation
concrete 327
dispatch, see dispatch
hook, see hook operation
overriding 16
primitive 327, 329
Orbix
use of Factory Method 116
Originator
participant of Memento 285, 285c, 286i
originator 284
overloading
used to implement Proxy 211
used to implement Visitor 72, 337

P

parameterized types 21, 361, see also template
compared with inheritance 22
compared with composition 22
parent class, see class, parent
parent references
defined in Composite 166
parser 247
part-whole, see recursive composition
see also aggregation
Pascal 4
passive iterator, see iterator, passive
PassivityWrapper 182
path
specifying multi-segment shapes 57
pattern language 356
Pattern Languages of Programs 357
pattern matching 243
persistence 209
Picture 163c, 164o
PLoP, see Pattern Languages of Programs
pluggable adapter 142
implementation of 144145, 144c, 145c, 148, 149c
PMFactory 50c
PMIconWindow 151, 151c
PMWindow 151, 151c
PMWindowImp 152, 152c, 158159
Point 373
Policy, see Strategy
polymorphic iteration 258
implementing in C++ 261
polymorphism 14, 361
used with inheritance 18
postorder traversal, see traversal, postorder
preorder traversal, see traversal, preorder
PreorderIterator 67
member functions 6869
Presentation Manager 35, 48, 52, 56, 57, 87, 151, 158
PricingVisitor 341
PrintDialog 223o, 224i
private inheritance 361, see also inheritance, implementation
Product
participant of Builder 98c, 99
participant of Factory Method 108, 108c
product objects 49
changing at run-time 119
creating in Abstract Factory 90
exchanging 89
family of 87
varying representation of 100
protection proxy, see proxy, protection
protocol 361
Prototype 117
compared with Abstract Factory 126, 135
combined with Command 238
compared with Factory Method 116, 120
in catalog summary 9
participant of Prototype 119, 119c
used to implement Abstract Factory 90
prototype 117
prototype manager 121
prototyping phase of lifecycle 353
Proxy 207
combined with Iterator 262
compared with Decorator 220
in catalog summary 9
Proxy
participant of Proxy 209co, 209
proxy 207
protection 208, 210
remote 208, 210
virtual 208, 210
pseudocode 16, 16c, 365c
Publish-Subscribe, see Observer
pull model 298
pull-down menu, see menu, pull-down
purpose of design pattern, see design pattern, purpose
push model 298

Q

QOCA
use of Adapter 143
use of Interpreter 255
use of Memento 291

R

RApp
use of Strategy 323
RealSubject
participant of Proxy 209co, 210
Receiver
participant of Command 236, 236c, 237i, 238
receiver 361
decoupling from sender 346
implicit 224
Rect 374
Rectangle 20, 20c
recursive composition 36, see also Composite
iteration over 262
of document structure 36
of graphic elements 163
of part-whole structures 164
redesign, causes of 24
redo, see undo/redo
refactoring 326, 353
reference counting 210
RefinedAbstraction
participant of Bridge 153c, 154
regular expression 243
representing in Smalltalk 248
RegularExpression 244c
remote proxy, see proxy, remote
RepetitionExpression 244co, 343
implemented in Smalltalk 249
request 11, 361
automatic forwarding of 229
encapsulation of 59, see also Command
guaranteed receipt of 226
representing 227
sequencing 234
Responder 232
reuse
black-box 19, 354, 359
by composition 19
by parameterized types 21
by subclassing 19
code 26
designing for 2425
frameworks 26
internal 25
maximizing 23
of implementation 18
toolkits 26
white-box 19, 354, 362
Rich Text Format 97
robust iterator, see iterator, robust
Room 82c, 83
RTF, see Rich Text Format
RTFReader 97, 97c
RTL Smalltalk compiler
use of Composite 172
use of Strategy 323

S

scope of design pattern, see design pattern, scope
Scrollbar 50c
ScrollDecorator 176o, 176c
Scroller 45, 46o
Self 4, 121, 309
sender
decoupling from receiver 346
SequenceExpression 244co, 343
implemented in Smalltalk 249
sequencing requests 234
shallow copy, see copy, shallow
Shape 139, 140c, 146
shrinkability 320
signature 13, 361
SimpleCompositor 42, 42c, 315, 315c, 321
single static assignment form, SSA 172
single-dispatch, see dispatch, single
Singleton 127
C++ implementation 129, 131
in catalog summary 9
registry of 130
subclassing 130
used to implement Abstract Factory 90
Singleton
participant of Singleton 127c, 128
Sketchpad 125
SkipList 258c, 265
skiplist 258
Smalltalk-80, see also ObjectWorks\Smalltalk, Smalltalk/V
use of Builder 105
use of Composite 172
use of Factory Method 115
use of Interpreter 251
use of Iterator 270
use of Observer 303
use of Singleton 133
use of Visitor 344
Smalltalk/V
use of Interpreter 251
use of Mediator 278, 281
smart pointers 209
smart references 209
software platform
isolating application from 24
Solitaire, see Singleton
SolverState 283284
SPECTalk
use of Interpreter 255
spelling checking 64
SpellingChecker 7173
SpellingCheckerVisitor 75
StandardMazeBuilder 103
State 305
C++ idiom for, see envelope-letter idiom
in catalog summary 9
use of delegation in 21
State
participant of State 306, 306c
state
accumulating during traversal 336
avoiding inconsistent 308
extrinsic 196
incremental changes to 287
intrinsic 196
sharing 308, see also Flyweight
state transitions
atomic 308
defining 308
table-driven 308
Strategy 315
compared with Decorator 179
in catalog summary 8
Lexi's use of 42
use in Choices 193
use in Model/View/Controller 6
use of delegation in 21
Strategy 180o
making optional 320
participant of Strategy 316c, 316
strategy 315
Stream 183, 183c
StreamDecorator 183, 183c
stretchability 320
Stroustrup, Bjarne 160
structural pattern 10, 137
comparison between class and object scope 137
discussion of 219
subclass, see class, subclass
subclassing
extending functionality by 24
Subject 301
avoiding dangling references to 297
combining with Observer 300
participant of Observer 294c, 295, 295i, 300c, 347i
participant of Proxy 209co, 210
subject 294
mapping to observers 297
observing more than one 297
subsystem 361
simplifying interface to, see Facade
subtype, see type, subtype
successor 224
connecting in chain 227
implementing chain of 225
superclass 361, see also class, parent
supertype, see type, supertype
Surrogate, see Proxy
Sutherland, Ivan 125
swaps 323

T

Target
participant of Adapter 141, 141c
TCP protocol 309
TCPConnection 305, 305c, 309
TCPState 305, 305c, 310
template 21, see also parameterized types
used to implement Command 239
used to implement Factory Method 113
used to implement Strategy 319, 323
Template Method 325
calling Factory Methods 116
in catalog summary 9
naming conventions for 329
used to implement Iterator 270
template method 326
terminal symbol 246
shared using Flyweight 247
TerminalExpression
participant of Interpreter 245c, 246
TEX 42, 97, 316
TeXCompositor 42c, 315, 315c, 322
TextShape 139, 140c, 146, 147
TextView
use in Adapter 139, 140c, 146
use in Decorator 176c, 176o
ThingLab 125
THINK
use of Command 242
use of Observer 303
Token, see Memento
Tool 117, 118c, 313, 313c
toolkit 26, 233, 362
see Andrew
see Booch Components
see Fresco
see InterViews
see IRIS Inventor
see Object Windows
see QOCA
see THINK
Transaction, see Command
transaction 236
transparent enclosure 43, see also Decorator
traversal of aggregate objects, see also Iterator
across class hierarchies 336
assigning responsibility for in Visitor 339
inorder, preorder, postorder 262
TreeAccessorDelegate 145, 145c
TreeDisplay 142, 144, 144c, 145c
two-way adapter, see adapter, two-way
type 13
compared with class 16
C++, definition in 17
Eiffel, definition in 17
Smalltalk, definition in 17
subtype 13
supertype 13
type-checking 332
to identify requests at run-time 228
see also dynamic_cast
TypeCheckingVisitor 332c

U

undo/redo 5960, 6264, 235, 238, 283, 287
avoiding error accumulation during 239
Unidraw
use of Adapter 143
use of Chain of Responsibility 232
use of Command 232, 242
use of Factory Method 111
use of Iterator 270
use of Mediator 282
use of Memento 289
use of Observer 303
use of Prototype 126
use of State 313
UnsharedConcreteFlyweight
participant of Flyweight 199
updates
encapsulating complex 299
limiting unexpected 296
protocol for in Observer 296
triggering 297

V

Validator 323
VariableExp 252
VariableRefNode 333c
ViewManager 281, 281o
Virtual Constructor, see Factory Method
virtual memory framework 192
virtual proxy, see proxy, virtual
Visitor 331
combined with Interpreter 247, 255
in catalog summary 9
interaction diagram for Lexi 74
use in Lexi 76
use in compiler example 190, 331
use of delegation in 21
Visitor 75, 337
participant of Visitor 334, 334c
visitor 74, 332
VisualComponent 176, 176c, 180
vocabulary, defining common 352

W

Wall 82c, 83
white-box reuse, see reuse, white-box
Widget 224c, 230, 275c, 278
widget 48, 87
Glyph hierarchy 50
WidgetFactory 87
Window 20c, 39, 54c, 55c, 152, 156
configuring with WindowImp 5758
interface 53
window systems 35
support in Lexi 51
WindowImp 55, 55c, 152, 152c, 157
subclasses 55
Windows, see Microsoft Windows
WindowSystemFactory 57
Wrapper, see Adapter, Decorator
WYSIWYG 33

X

X Window System 52, 56, 57, 151, 158
XIconWindow 151, 151c
XWindow 151, 151c
XWindowImp 152, 152c, 158