Skip to main content

Learning Resources

This module is populated from the local chunked books in library/raw/semester-03-software-design/books and a small set of validated external links. Use this page as a source map, not as an instruction to read everything.

Source Stack

BookRoleHow to use it in this module
Head First Design PatternsPrimary teaching sourceFirst stop when a pattern's intent or "what problem does this solve" is unclear. Narrative style, many worked examples.
Design Patterns (GoF)Canonical referenceGo here for the canonical vocabulary, applicability lists, and sample code. Precise but dense.
Refactoring (Fowler)Selective supportUse when the question is "how do I get there from here safely." Move-by-move mechanics.
Clean Code (Martin)Selective supportBest short chapter on systems, dependency injection, and construction boundaries.
Good Code, Bad Code (Tom Long)Judgment supportUse when weighing inheritance vs composition, interface vs concrete class, or "should we add a pattern here."
OOAD (Dennis de Champeaux et al.)Background onlyOpen only when you want a second angle on inheritance, responsibility distribution, or hierarchy design.

Resource Map by Cluster

Cluster 1: Creational -- Construction Flexibility

NeedBest local chunkWhy
first pass on factoriesHead First: The Factory Pattern (chapter intro)Best narrative introduction to why new is sometimes a problem
simple factory (non-GoF)Head First: The Simple Factory DefinedClears up the terminology before Factory Method
Factory Method canonicalGoF: Factory Method -- Applicability, ImplementationCanonical conditions under which the pattern earns its cost
Factory Method narrativeHead First: Factory Method Pattern DefinedStrongest "why does this exist" explanation
dependency directionHead First: Looking at Object Dependencies, Applying the PrincipleDependency Inversion framing that explains factories in the large
Abstract Factory intentGoF: Abstract Factory -- Intent, Implementation, Sample CodeCanonical family-of-products treatment
Abstract Factory narrativeHead First: Families of Ingredients, Revisiting Our Pizza Stores, Abstract Factory DefinedWalks through the transition from Factory Method to Abstract Factory
Builder applicabilityGoF: Builder -- Applicability, Sample CodeWhen the pattern is justified; canonical shape
fluent Builder in practiceGood Code, Bad Code: The Builder PatternModern fluent Builder, immutability, and validation in build()
replace constructorRefactoring: Replace Constructor with Factory FunctionThe refactor that often introduces a Builder or factory function
PrototypeGoF: Prototype -- Applicability, Sample CodeCanonical treatment; keep it brief
Singleton canonicalGoF: Singleton -- Implementation, Sample CodeCanonical shape; read the critiques elsewhere
Singleton narrativeHead First: The Singleton Pattern, Dissecting the Classic SingletonThread-safety, caveats, real-world problems

Cluster 2: Structural -- Interface Bridging

NeedBest local chunkWhy
structural chapter overviewGoF: 4. Structural PatternsFrames what "structural" means before the patterns
Adapter canonicalGoF: Adapter -- Applicability, Sample CodeCanonical applicability and object vs class adapter
Adapter narrativeHead First: The Adapter and Facade Patterns, How the Client Uses the Adapter, Object and Class Adapters, Enumeration-Iterator AdapterBest-narrative walk from mismatch to adapter, with a real Java example
Facade canonicalGoF: Facade -- Participants, Known UsesCanonical roles and where the pattern appears in practice
Facade narrativeHead First: Lights, Camera, Facade, Facade Pattern DefinedIntuition-first treatment with the home-theater example
BridgeGoF: Bridge -- Intent, Participants, Sample Code, Known UsesOnly deep source for Bridge; read sequentially

Cluster 3: Structural -- Composition and Layering

NeedBest local chunkWhy
Composite canonicalGoF: Composite -- Implementation, Sample Code, Known UsesCanonical form, leaf/composite trade-offs, applied examples
Composite narrativeHead First: The Composite Pattern Defined, Designing Menus with CompositeBest safety-vs-transparency discussion
Decorator narrativeHead First: The Open/Closed Principle, Meet the Decorator Pattern, New Barista Training, Coding Condiments, Real-World Java I/OStrongest pedagogical walk-through, including a real-world Java I/O example
Decorator canonicalGoF: Decorator -- Implementation, Sample CodeCanonical shape
Proxy narrativeHead First: The Proxy Pattern, Remote Proxy, Virtual Proxy, Album Cover Virtual Proxy, Protection ProxyCovers all three major proxy kinds with examples
Proxy canonicalGoF: Proxy -- Implementation, Sample CodeCanonical shape and trade-offs

Cluster 4: Pragmatic Pattern Selection

NeedBest local chunkWhy
category mapGoF: 1.5 Organizing the CatalogWhere the creational / structural / behavioral split actually comes from
selection algorithmGoF: 1.7 How to Select a Design PatternCanonical checklist
design for changeGoF: Designing for Change (Part 1), (Part 2)The force-driven view; what patterns are for
patterns in real codeHead First: Better Living with Patterns, May the Force Be with You (1), May the Force Be with You (2), Organizing Patterns, Thinking in Patterns, Cruisin' Objectville with the GoF, The Patterns ZooLong section on applying patterns with taste, avoiding cargo-cult
inheritance alternativesGoF: Class Versus Interface Inheritance, Putting Reuse Mechanisms to Work, DelegationClassic "favor composition" argument, in GoF's own voice
composition over inheritanceGood Code, Bad Code: Class Inheritance Can Be Problematic, Use CompositionModern restatement with concrete refactors

Cluster 5: Dependency Injection and Composition Roots

NeedBest local chunkWhy
dependency injection primerClean Code: Chapter 11 -- SystemsThe clearest short chapter on DI and separation of construction
DI in practiceGood Code, Bad Code: Design with Dependency Injection in MindModern example-driven treatment

External Resources (Validated)

Use Rules

  • If you are stuck on what the pattern is for, go to Head First Design Patterns first.
  • If you need a precise definition or the canonical participants, go to Design Patterns (GoF).
  • If the question is "how do I get there safely from this code," go to Refactoring.
  • If the question is "should I even add this," go to Good Code, Bad Code or Clean Code.
  • Open one chunk for one concept gap; do not wander through a whole chapter sequence by default.
  • External links are validated; use them only after the local sources have not answered the question in ten minutes.