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.

## 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 299, 300c
Character 38, 38c
character
  represented as object 38, 195-196
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, 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 Mediator278, 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 219, 220
  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 283-284, 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