About the Author |
|
xxi | |
About the Technical Reviewers |
|
xxiii | |
Acknowledgments |
|
xxv | |
Introduction |
|
xxvii | |
|
|
1 | (76) |
|
Chapter 1 Understanding SOLID Principles |
|
|
3 | (62) |
|
Single Responsibility Principle |
|
|
5 | (7) |
|
|
5 | (1) |
|
|
6 | (2) |
|
|
8 | (1) |
|
|
8 | (1) |
|
|
9 | (1) |
|
|
9 | (2) |
|
|
11 | (1) |
|
|
12 | (17) |
|
|
14 | (2) |
|
|
16 | (3) |
|
|
19 | (1) |
|
|
20 | (1) |
|
|
20 | (3) |
|
|
23 | (4) |
|
|
27 | (1) |
|
|
28 | (1) |
|
Liskov Substitution Principle |
|
|
29 | (14) |
|
|
31 | (2) |
|
|
33 | (2) |
|
|
35 | (2) |
|
|
37 | (1) |
|
|
38 | (4) |
|
|
42 | (1) |
|
|
42 | (1) |
|
Interface Segregation Principle |
|
|
43 | (11) |
|
|
44 | (4) |
|
|
48 | (2) |
|
|
50 | (1) |
|
|
50 | (1) |
|
|
51 | (1) |
|
|
51 | (2) |
|
|
53 | (1) |
|
|
53 | (1) |
|
Dependency Inversion Principle |
|
|
54 | (9) |
|
|
55 | (1) |
|
|
56 | (1) |
|
|
57 | (1) |
|
|
57 | (1) |
|
|
58 | (1) |
|
|
59 | (2) |
|
|
61 | (1) |
|
|
61 | (2) |
|
|
63 | (2) |
|
Chapter 2 Simple Factory Pattern |
|
|
65 | (12) |
|
|
65 | (1) |
|
|
65 | (1) |
|
|
65 | (1) |
|
|
66 | (1) |
|
|
66 | (7) |
|
|
68 | (1) |
|
|
69 | (1) |
|
|
69 | (3) |
|
|
72 | (1) |
|
|
72 | (1) |
|
|
73 | (4) |
|
|
76 | (1) |
|
Part II The Gang of Four (GoF) Design Patterns |
|
|
77 | (498) |
|
Chapter 3 Factory Method Pattern |
|
|
79 | (18) |
|
|
79 | (1) |
|
|
79 | (1) |
|
|
79 | (1) |
|
|
80 | (1) |
|
|
80 | (7) |
|
|
83 | (1) |
|
|
83 | (1) |
|
|
84 | (3) |
|
|
87 | (1) |
|
|
87 | (4) |
|
|
88 | (3) |
|
|
91 | (1) |
|
|
91 | (1) |
|
|
91 | (6) |
|
Chapter 4 Abstract Factory Pattern |
|
|
97 | (22) |
|
|
97 | (1) |
|
|
97 | (1) |
|
|
98 | (1) |
|
|
99 | (1) |
|
|
99 | (11) |
|
|
102 | (1) |
|
|
102 | (2) |
|
|
104 | (5) |
|
|
109 | (1) |
|
|
110 | (1) |
|
The Client Code Variations |
|
|
110 | (3) |
|
|
110 | (2) |
|
|
112 | (1) |
|
|
113 | (6) |
|
Chapter 5 Prototype Pattern |
|
|
119 | (30) |
|
|
119 | (1) |
|
|
119 | (1) |
|
|
120 | (1) |
|
|
120 | (1) |
|
|
121 | (7) |
|
|
123 | (1) |
|
|
124 | (1) |
|
|
124 | (4) |
|
|
128 | (1) |
|
|
128 | (6) |
|
|
129 | (1) |
|
|
129 | (2) |
|
|
131 | (1) |
|
|
132 | (1) |
|
|
133 | (1) |
|
|
134 | (1) |
|
Shallow Copy vs. Deep Copy |
|
|
135 | (7) |
|
|
136 | (4) |
|
Output From Shallow Copy Implementation |
|
|
140 | (1) |
|
|
140 | (1) |
|
Output From Deep Copy Implementation |
|
|
141 | (1) |
|
|
142 | (1) |
|
|
142 | (7) |
|
|
143 | (3) |
|
|
146 | (1) |
|
|
147 | (2) |
|
Chapter 6 Builder Pattern |
|
|
149 | (26) |
|
|
149 | (1) |
|
|
149 | (2) |
|
|
151 | (1) |
|
|
151 | (1) |
|
|
152 | (11) |
|
|
155 | (1) |
|
|
155 | (2) |
|
|
157 | (6) |
|
|
163 | (1) |
|
|
163 | (3) |
|
Alternative Implementation |
|
|
166 | (7) |
|
|
168 | (5) |
|
|
173 | (1) |
|
|
173 | (1) |
|
|
173 | (2) |
|
Chapter 7 Singleton Pattern |
|
|
175 | (16) |
|
|
175 | (1) |
|
|
175 | (1) |
|
|
175 | (1) |
|
|
176 | (1) |
|
|
176 | (4) |
|
|
177 | (1) |
|
|
177 | (1) |
|
|
178 | (1) |
|
|
179 | (1) |
|
|
180 | (1) |
|
|
180 | (4) |
|
Alternative Implementations |
|
|
184 | (5) |
|
Demonstration 2 Eager Initialization |
|
|
184 | (1) |
|
|
184 | (2) |
|
Demonstration 3 Bill Pugh's Solution |
|
|
186 | (1) |
|
|
187 | (1) |
|
Demonstration 4 Enum Singleton |
|
|
187 | (1) |
|
|
188 | (1) |
|
|
189 | (2) |
|
|
191 | (14) |
|
|
191 | (1) |
|
|
191 | (1) |
|
|
191 | (1) |
|
|
192 | (1) |
|
|
192 | (6) |
|
|
194 | (1) |
|
|
195 | (1) |
|
|
195 | (3) |
|
|
198 | (1) |
|
|
198 | (7) |
|
|
200 | (3) |
|
|
203 | (2) |
|
Chapter 9 Decorator Pattern |
|
|
205 | (22) |
|
|
205 | (1) |
|
|
205 | (1) |
|
|
206 | (1) |
|
|
206 | (1) |
|
|
207 | (15) |
|
|
207 | (3) |
|
|
210 | (4) |
|
|
214 | (1) |
|
|
215 | (1) |
|
|
216 | (4) |
|
|
220 | (2) |
|
|
222 | (5) |
|
Chapter 10 Adapter Pattern |
|
|
227 | (22) |
|
|
227 | (1) |
|
|
227 | (1) |
|
|
228 | (1) |
|
|
229 | (1) |
|
|
229 | (10) |
|
|
233 | (1) |
|
|
234 | (1) |
|
|
235 | (3) |
|
|
238 | (1) |
|
|
238 | (1) |
|
|
239 | (1) |
|
|
239 | (1) |
|
|
240 | (1) |
|
|
240 | (9) |
|
|
240 | (3) |
|
|
243 | (1) |
|
|
244 | (5) |
|
Chapter 11 Facade Pattern |
|
|
249 | (14) |
|
|
249 | (1) |
|
|
249 | (1) |
|
|
250 | (1) |
|
|
250 | (1) |
|
|
251 | (9) |
|
|
254 | (1) |
|
|
254 | (1) |
|
|
255 | (3) |
|
|
258 | (2) |
|
|
260 | (1) |
|
|
260 | (3) |
|
Chapter 12 Flyweight Pattern |
|
|
263 | (20) |
|
|
263 | (1) |
|
|
263 | (1) |
|
|
264 | (1) |
|
|
265 | (1) |
|
|
265 | (14) |
|
|
270 | (1) |
|
|
270 | (2) |
|
|
272 | (4) |
|
|
276 | (2) |
|
|
278 | (1) |
|
|
279 | (4) |
|
Chapter 13 Composite Pattern |
|
|
283 | (18) |
|
|
283 | (1) |
|
|
283 | (1) |
|
|
284 | (1) |
|
|
284 | (1) |
|
|
285 | (13) |
|
|
286 | (1) |
|
|
286 | (1) |
|
|
287 | (8) |
|
|
295 | (2) |
|
|
297 | (1) |
|
|
298 | (3) |
|
Chapter 14 Bridge Pattern |
|
|
301 | (26) |
|
|
301 | (1) |
|
|
301 | (1) |
|
|
301 | (1) |
|
|
302 | (1) |
|
|
303 | (9) |
|
|
306 | (1) |
|
|
307 | (1) |
|
|
307 | (5) |
|
|
312 | (1) |
|
Additional Implementation |
|
|
312 | (10) |
|
|
316 | (1) |
|
|
317 | (5) |
|
|
322 | (1) |
|
|
322 | (5) |
|
Chapter 15 Template Method Pattern |
|
|
327 | (16) |
|
|
327 | (1) |
|
|
327 | (1) |
|
|
328 | (1) |
|
|
328 | (1) |
|
|
328 | (6) |
|
|
330 | (1) |
|
|
331 | (1) |
|
|
332 | (2) |
|
|
334 | (1) |
|
|
334 | (9) |
|
|
336 | (4) |
|
|
340 | (3) |
|
Chapter 16 Observer Pattern |
|
|
343 | (24) |
|
|
343 | (1) |
|
|
343 | (3) |
|
|
346 | (1) |
|
|
346 | (2) |
|
|
348 | (12) |
|
|
352 | (1) |
|
|
353 | (1) |
|
|
354 | (5) |
|
|
359 | (1) |
|
|
360 | (7) |
|
Chapter 17 Chain of Responsibility Pattern |
|
|
367 | (18) |
|
|
367 | (1) |
|
|
367 | (1) |
|
|
368 | (1) |
|
|
368 | (1) |
|
|
369 | (12) |
|
|
374 | (1) |
|
|
374 | (1) |
|
|
375 | (5) |
|
|
380 | (1) |
|
|
381 | (4) |
|
Chapter 18 Iterator Pattern |
|
|
385 | (20) |
|
|
385 | (1) |
|
|
385 | (1) |
|
|
386 | (1) |
|
|
387 | (1) |
|
|
387 | (11) |
|
|
390 | (1) |
|
|
390 | (1) |
|
|
391 | (3) |
|
|
394 | (1) |
|
|
394 | (1) |
|
|
395 | (3) |
|
|
398 | (1) |
|
|
398 | (7) |
|
|
400 | (4) |
|
|
404 | (1) |
|
Chapter 19 Command Pattern |
|
|
405 | (30) |
|
|
405 | (1) |
|
|
405 | (1) |
|
|
406 | (1) |
|
|
406 | (1) |
|
|
407 | (10) |
|
|
410 | (1) |
|
|
411 | (1) |
|
|
412 | (4) |
|
|
416 | (1) |
|
|
417 | (4) |
|
|
421 | (14) |
|
|
425 | (1) |
|
|
425 | (7) |
|
|
432 | (3) |
|
Chapter 20 Memento Pattern |
|
|
435 | (20) |
|
|
435 | (1) |
|
|
435 | (1) |
|
|
435 | (1) |
|
|
436 | (1) |
|
|
437 | (9) |
|
|
441 | (1) |
|
|
441 | (1) |
|
|
442 | (3) |
|
|
445 | (1) |
|
|
446 | (1) |
|
|
446 | (3) |
|
Additional Implementation |
|
|
449 | (6) |
|
|
450 | (1) |
|
|
450 | (1) |
|
|
451 | (2) |
|
|
453 | (1) |
|
|
454 | (1) |
|
Chapter 21 Strategy Pattern |
|
|
455 | (14) |
|
|
455 | (1) |
|
|
455 | (1) |
|
|
456 | (1) |
|
|
456 | (1) |
|
|
456 | (9) |
|
|
459 | (1) |
|
|
460 | (1) |
|
|
461 | (4) |
|
|
465 | (1) |
|
|
465 | (4) |
|
|
469 | (20) |
|
|
469 | (1) |
|
|
469 | (1) |
|
|
470 | (1) |
|
|
470 | (1) |
|
|
470 | (12) |
|
|
473 | (1) |
|
|
474 | (1) |
|
|
475 | (5) |
|
|
480 | (1) |
|
|
481 | (1) |
|
|
482 | (7) |
|
Chapter 23 Mediator Pattern |
|
|
489 | (24) |
|
|
489 | (1) |
|
|
489 | (1) |
|
|
489 | (1) |
|
|
490 | (1) |
|
|
490 | (13) |
|
|
495 | (1) |
|
|
496 | (1) |
|
|
497 | (5) |
|
|
502 | (1) |
|
|
502 | (1) |
|
Additional Implementation |
|
|
503 | (5) |
|
|
504 | (3) |
|
|
507 | (1) |
|
|
508 | (1) |
|
|
508 | (5) |
|
Chapter 24 Visitor Pattern |
|
|
513 | (36) |
|
|
513 | (1) |
|
|
513 | (1) |
|
|
514 | (1) |
|
|
514 | (1) |
|
|
515 | (7) |
|
|
518 | (1) |
|
|
519 | (1) |
|
|
520 | (2) |
|
|
522 | (1) |
|
|
522 | (1) |
|
Using Visitor Pattern and Composite Pattern Together |
|
|
522 | (23) |
|
|
526 | (1) |
|
|
526 | (1) |
|
|
527 | (1) |
|
|
527 | (1) |
|
|
528 | (1) |
|
|
528 | (8) |
|
|
536 | (1) |
|
|
537 | (1) |
|
|
537 | (7) |
|
|
544 | (1) |
|
|
545 | (4) |
|
Chapter 25 Interpreter Pattern |
|
|
549 | (26) |
|
|
549 | (1) |
|
|
549 | (3) |
|
|
552 | (1) |
|
|
552 | (1) |
|
|
552 | (16) |
|
|
558 | (1) |
|
|
559 | (1) |
|
|
560 | (7) |
|
|
567 | (1) |
|
|
568 | (1) |
|
|
568 | (1) |
|
Alternative Implementation |
|
|
569 | (6) |
|
|
570 | (3) |
|
|
573 | (2) |
|
Part III Additional Design Patterns |
|
|
575 | (44) |
|
Chapter 26 Null Object Pattern |
|
|
577 | (16) |
|
|
577 | (1) |
|
|
577 | (6) |
|
|
578 | (2) |
|
|
580 | (1) |
|
|
581 | (1) |
|
|
582 | (1) |
|
|
582 | (1) |
|
|
583 | (1) |
|
|
583 | (1) |
|
|
583 | (7) |
|
|
585 | (1) |
|
|
585 | (1) |
|
|
586 | (3) |
|
|
589 | (1) |
|
|
590 | (1) |
|
|
590 | (3) |
|
|
593 | (26) |
|
|
593 | (1) |
|
|
594 | (3) |
|
|
594 | (2) |
|
|
596 | (1) |
|
|
596 | (1) |
|
|
596 | (1) |
|
|
597 | (1) |
|
|
597 | (1) |
|
|
598 | (14) |
|
|
602 | (1) |
|
|
602 | (1) |
|
|
603 | (7) |
|
|
610 | (2) |
|
|
612 | (7) |
|
|
614 | (1) |
|
|
615 | (4) |
|
Part IV The Final Talks on Design Patterns |
|
|
619 | (22) |
|
Chapter 28 Criticisms of Design Patterns |
|
|
621 | (6) |
|
|
624 | (3) |
|
|
627 | (8) |
|
|
627 | (1) |
|
Brief History of Anti-Patterns |
|
|
628 | (1) |
|
Examples of Anti-Patterns |
|
|
629 | (2) |
|
|
631 | (1) |
|
|
632 | (3) |
|
|
635 | (6) |
|
Appendix A A Brief Overview of GoF Design Patterns |
|
|
641 | (8) |
|
|
645 | (4) |
|
Appendix B The Road Ahead |
|
|
649 | (2) |
|
|
650 | (1) |
|
Appendix C Recommended Reading |
|
|
651 | (2) |
Index |
|
653 | |