How to Use This Reference
This page is organized the same way the Gang of Four organized their catalog: Creational patterns control how objects get built, Structural patterns control how objects are composed into larger structures, and Behavioral patterns control how objects communicate and distribute responsibility. Rather than memorizing UML diagrams, the fastest way to use a cheat sheet like this is to memorize the trigger — the specific force or symptom in your code that should make a pattern come to mind — because in real work you start from a problem, not a pattern name, and need to search your memory by symptom.
Cricket analogy: A bowling coach's quick-reference chart for match situations — 'batter crowding the crease: bowl a bouncer; batter camped on the back foot: bowl full and straight' — works the same way, organized by trigger symptom rather than by delivery type, so a bowler can react instantly mid-over.
Creational Patterns at a Glance
Singleton ensures a class has exactly one instance and provides a global access point — trigger: you need exactly one shared coordinator, like a configuration manager, but beware the testability cost. Factory Method lets a superclass defer instantiation to subclasses — trigger: a base class needs to create an object but doesn't know the concrete type until a subclass specifies it. Abstract Factory produces families of related objects without specifying concrete classes — trigger: you need to guarantee a set of related products (e.g., a UI theme's button, checkbox, and scrollbar) are used together consistently. Builder separates the construction of a complex object from its representation — trigger: a constructor would otherwise need many optional parameters, causing a 'telescoping constructor' problem. Prototype creates new objects by cloning an existing instance — trigger: object creation is expensive and an existing configured instance is a cheaper starting point than building from scratch.
Cricket analogy: Builder is like assembling a custom cricket bat order — willow grade, handle type, weight, grip — through a guided step-by-step configurator instead of a single order form with twenty optional fields that's easy to fill in wrong.
Structural and Behavioral Patterns at a Glance
Among structural patterns: Adapter converts one class's interface into another interface clients expect (trigger: integrating a third-party library with an incompatible API); Decorator attaches additional responsibilities to an object dynamically (trigger: you need optional, stackable behavior without an explosion of subclasses); Facade provides a simplified interface to a complex subsystem (trigger: clients shouldn't need to know about five interacting classes just to perform one common task); Composite treats individual objects and compositions of objects uniformly (trigger: a tree structure where clients shouldn't care if a node is a leaf or a branch). Among behavioral patterns: Observer notifies dependents automatically when a subject's state changes (trigger: one-to-many state-dependent updates); Strategy makes an algorithm interchangeable at runtime (trigger: multiple ways to do the same task that need to be swappable); Command encapsulates a request as an object (trigger: you need undo/redo, queuing, or logging of operations); Template Method defines an algorithm's skeleton in a base class while letting subclasses override specific steps (trigger: several algorithms share the same overall structure but differ in specific steps).
Cricket analogy: Template Method is like the fixed skeleton of an ODI innings — powerplay, middle overs, death overs — where every team follows the same overall structure but each captain overrides the specific tactics within each phase.
QUICK LOOKUP TABLE
-------------------
Creational
Singleton -> exactly one instance, global access point
Factory Method -> subclass decides which concrete class to instantiate
Abstract Factory -> create families of related objects consistently
Builder -> step-by-step construction of a complex object
Prototype -> clone an existing configured instance
Structural
Adapter -> make an incompatible interface match what's expected
Decorator -> attach behavior dynamically, avoid subclass explosion
Facade -> simplify access to a complex subsystem
Composite -> treat leaf and composite nodes uniformly (tree structures)
Proxy -> control access to another object
Behavioral
Observer -> one-to-many notification on state change
Strategy -> interchangeable algorithms, swappable at runtime
Command -> encapsulate a request as an object (undo/redo, queues)
Template Method -> fixed algorithm skeleton, overridable steps
State -> behavior changes with internal state, self-transitionsWhen two patterns seem to fit, prefer the one with fewer moving parts that still resolves the actual force present. Facade over Adapter+Composite combined, Strategy over a State machine if there's no real self-transition logic — simplicity is a tiebreaker, not an afterthought.
Common Pairings You'll See in Real Systems
Patterns are rarely used in isolation in production systems; certain combinations recur because they solve adjacent, commonly co-occurring problems. Composite plus Visitor is common in tree-structured data like ASTs or file systems, where Composite provides the uniform tree traversal interface and Visitor adds new operations (like a linter's rule check) without modifying the node classes. Factory Method plus Singleton appears constantly in framework object pools and dependency injection containers, where the factory both constructs and caches the instance. Observer plus Command shows up in undo-capable GUI applications, where user actions become Command objects that notify Observer-based UI components to refresh once executed. Recognizing these pairings speeds up both reading unfamiliar codebases and designing new systems, because you can predict the second pattern once you spot the first.
Cricket analogy: Composite plus Visitor is like a scorecard's tree of innings, overs, and balls (Composite) that a separate statistics engine (Visitor) can traverse to compute strike rates or economy rates without the scorecard's own classes needing to know about statistics.
This cheat sheet is a memory aid, not a substitute for reading the actual problem carefully. Two problems that superficially sound similar can require different patterns depending on subtle details like whether variants need to know about each other (State) or must remain mutually independent (Strategy).
- Organize your pattern knowledge by trigger symptom, not by alphabetical name, for faster real-world recall.
- Creational patterns (Singleton, Factory Method, Abstract Factory, Builder, Prototype) control object construction.
- Structural patterns (Adapter, Decorator, Facade, Composite, Proxy) control how objects compose into larger structures.
- Behavioral patterns (Observer, Strategy, Command, Template Method, State) control communication and responsibility distribution.
- Prefer the pattern with fewer moving parts when two options both resolve the same force.
- Common real-world pairings: Composite+Visitor for trees, Factory Method+Singleton for pooled resources, Observer+Command for undoable UIs.
- Recognizing a pairing lets you predict the second pattern once you've spotted the first in unfamiliar code.
Practice what you learned
1. Which category do Singleton, Factory Method, Abstract Factory, Builder, and Prototype belong to?
2. What specific problem does the Builder pattern solve?
3. What is the primary difference between Facade and Adapter?
4. Which pairing commonly appears together in tree-structured systems like ASTs or file systems?
5. What heuristic should you apply when two different patterns both seem to resolve the same design force?
Was this page helpful?
You May Also Like
Refactoring to Patterns
How to evolve messy, ad-hoc code toward well-known design patterns incrementally, using the smell-driven refactoring approach popularized by Joshua Kerievsky.
Design Patterns Interview Questions
A focused prep guide covering the design-pattern questions most frequently asked in technical interviews, with the reasoning interviewers are actually testing for.
Design Patterns in Modern Frameworks
How classic GoF design patterns show up, sometimes disguised under different names, inside React, Spring, Angular, and other modern frameworks.
Anti-Patterns to Avoid
A tour of the most common design anti-patterns — recurring bad solutions to recurring problems — and how to recognize and refactor them before they calcify.
Related Reading
Related Study Notes in Software Engineering
Browse all study notesMicroservices Study Notes
Software Architecture · 30 topics
Software EngineeringTesting & TDD Study Notes
Software Testing · 30 topics
Software EngineeringSoftware Engineering Study Notes
Python · 40 topics
Software EngineeringGit & Version Control Study Notes
Bash · 40 topics
Software EngineeringSystem Design Study Notes
Architecture · 40 topics