Skip to main content

Design Patterns Overview

Design patterns are reusable solutions to recurring design problems. They are a vocabulary, not a prescription. Knowing when not to use a pattern is as important as knowing the pattern itself.


The Gang of Four (GoF) Patterns

The 23 classic patterns from Design Patterns: Elements of Reusable Object-Oriented Software (Gamma et al., 1994) are organized into three categories:

CategoryPurposePatterns
CreationalControl object creationSingleton, Factory Method, Abstract Factory, Builder, Prototype
StructuralCompose classes/objectsAdapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy
BehavioralObject communicationChain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor

Most Commonly Asked in LLD Interviews

From most to least frequently appearing:

πŸ₯‡ Tier 1 (Must Know β€” appear in almost every problem)
Strategy, Observer, Factory, Singleton, Builder

πŸ₯ˆ Tier 2 (High Frequency β€” know well)
Decorator, Command, State, Composite, Template Method

πŸ₯‰ Tier 3 (Know the concept)
Adapter, Facade, Proxy, Iterator, Chain of Responsibility

How to Recognize Which Pattern to Use

When you see...Consider...
Multiple algorithms that are interchangeableStrategy
One event that many objects need to react toObserver
Complex object construction with many optionsBuilder
Adding behavior to objects without subclassingDecorator
A request that should be encapsulated as an objectCommand
An object whose behavior changes based on internal stateState
A tree of objects (part-whole hierarchy)Composite
An incompatible interface you can't changeAdapter
Exactly one instance of a class neededSingleton
Subclasses decide which class to instantiateFactory Method
A fixed algorithm with customizable stepsTemplate Method

Common Mistakes to Avoid

Overusing Singleton

Singleton is the most misused pattern. It introduces global state and makes testing hard.

// ❌ Using Singleton just because "there's only one right now"
public class DatabaseConnection {
private static DatabaseConnection instance;
// ... is this really a singleton? What about test isolation?
}

// βœ… Better: use dependency injection; let the DI container manage lifecycle
public class DatabaseConnection {
private final String url;
public DatabaseConnection(String url) { this.url = url; }
}
// Wire once in main(), inject everywhere
Interview Tip 🎯

When you mention Singleton in an interview, proactively say: "I'd use Singleton here for X, but I'm aware of the downsides β€” global state makes unit testing harder. In a production codebase I'd prefer to manage this lifecycle through a DI framework." This shows senior thinking.

Pattern Matching

Don't force a pattern onto every problem. The simplest code that expresses intent clearly is always better.

Naming Patterns in the Name

StrategyStrategy, FactoryFactory β€” these suggest you're thinking about patterns instead of the domain.


The Pattern Selection Framework

When you identify a design decision in an interview, ask yourself:

1. What VARIES in this design?
β†’ The variation point is where a pattern should live.

2. What STAYS THE SAME?
β†’ This is the stable core β€” protect it from change.

3. What RELATIONSHIP exists between objects?
β†’ is-a β†’ inheritance/interface
β†’ has-a β†’ composition
β†’ uses-a β†’ dependency injection

4. What CHANGES OVER TIME?
β†’ State pattern for behavior changes
β†’ Observer for data propagation
β†’ Command for action history

Pattern Combinations in Real Problems

Real systems use multiple patterns together. Here's how they combine in classic LLD problems:

ProblemPatterns Used
Parking LotStrategy (pricing), Factory (spot allocation), Observer (availability events)
Rate LimiterStrategy (algorithm), Singleton (per-resource limiter)
ElevatorState (door/movement), Strategy (scheduling), Observer (floor requests)
Movie BookingObserver (seat hold expiry), Command (book/cancel), Factory (seat types)
File SystemComposite (file/folder tree), Iterator (traversal), Decorator (permissions)

Next β†’ Creational Patterns

πŸ“–
Track Page Progress0 / 635 Read
Knowledge Base Completion0%