Skip to main content

Command Palette

Search for a command to run...

Interview OOD: 10 Design Patterns You Must Be Able to Explain

Updated
4 min read
Interview OOD: 10 Design Patterns You Must Be Able to Explain

Design patterns mermaid diagram

Interview OOD: 10 Design Patterns You Must Be Able to Explain

If you can't name the right pattern in an interview, you'll often overcomplicate or under-design a solution. Below are 10 foundational object-oriented design (OOD) patterns every engineer should be able to explain clearly: what they do, when to use them, benefits, and quick interview tips.


1) Singleton — Single instance, global access

  • Intent: Ensure a class has only one instance and provide a global point of access.
  • When to use: Logging, configuration, connection pools (with caution).
  • Pros: Controlled access to a single resource; easy global access.
  • Cons: Harder to test, can become a hidden global (anti-pattern if overused).
  • Interview tip: Mention thread-safety (lazy vs eager initialization) and dependency injection alternatives.

2) Factory Method — Subclasses decide what to create

  • Intent: Define an interface for creating an object, but let subclasses decide which class to instantiate.
  • When to use: When a class can’t know beforehand the exact types it must create.
  • Pros: Promotes loose coupling and single responsibility.
  • Interview tip: Distinguish from Abstract Factory (Factory Method creates one product; Abstract Factory creates families).

  • Intent: Provide an interface to create families of related or dependent objects without specifying concrete classes.
  • When to use: GUI toolkits (themes), cross-platform systems where sets of objects must match.
  • Pros: Ensures compatibility between created products; easy to switch families.
  • Interview tip: Explain how Abstract Factory returns multiple related products and show a client using an abstract factory rather than concrete constructors.

4) Builder — Construct complex objects step-by-step

  • Intent: Separate the construction of a complex object from its representation so that the same construction process can create different representations.
  • When to use: Building objects with many optional fields (e.g., complex DTOs, SQL query builders).
  • Pros: Clearer construction process, immutability, readable chained calls.
  • Interview tip: Compare to telescoping constructors and show fluent API example.

5) Prototype — Clone instead of re-create

  • Intent: Create new objects by copying an existing prototype instance.
  • When to use: When object creation is expensive or when you need many similar objects.
  • Pros: Fast creation, can preserve complex state.
  • Cons: Cloning pitfalls (shallow vs deep copy).
  • Interview tip: Discuss cloning strategies and when Prototype is preferable to Builder or Factory.

6) Adapter — Make incompatible interfaces work together

  • Intent: Convert the interface of a class into another interface clients expect.
  • When to use: Integrating legacy code or third-party libraries with your application.
  • Pros: Reuse existing components without changing them.
  • Interview tip: Differentiate Adapter (changes interface) from Facade (simplifies a subsystem).

7) Observer — Notify dependents on state change

  • Intent: Define a one-to-many dependency so that when one object changes state, its dependents are notified and updated automatically.
  • When to use: Event systems, MVC view updates, pub/sub mechanisms.
  • Pros: Loose coupling between subject and observers.
  • Interview tip: Mention potential memory leaks (unregistered observers) and threading considerations.

8) Strategy — Swap algorithms cleanly

  • Intent: Define a family of algorithms, encapsulate each one, and make them interchangeable.
  • When to use: Sorting strategies, compression methods, validation rules.
  • Pros: Open/closed principle; easy to add new algorithms without modifying clients.
  • Interview tip: Show how clients accept a strategy interface and switch implementations at runtime.

9) Decorator — Add behavior without modifying classes

  • Intent: Attach additional responsibilities to an object dynamically.
  • When to use: Adding features to objects at runtime (e.g., I/O streams, UI components).
  • Pros: More flexible than static inheritance; composes behavior.
  • Interview tip: Contrast with subclassing and explain stacking multiple decorators.

10) Command — Wrap requests; enables undo/redo

  • Intent: Encapsulate a request as an object, thereby letting you parameterize clients with queues, requests, and operations.
  • When to use: Queuing tasks, logging operations, implementing undo/redo.
  • Pros: Decouples requester from executor; supports macros, undo/redo.
  • Interview tip: Show how Command stores state needed to undo and how a history stack enables undo/redo.

Quick interview preparation checklist

  • Know the intent and typical use-cases for each pattern.
  • Be ready to sketch class interactions (who knows/uses whom).
  • State trade-offs and common pitfalls (threading, testing, tight coupling).
  • Give a concise real-world example from your experience.
  • If asked to design, justify why you chose a pattern and why alternatives aren’t as good.

Mastering these 10 patterns gives you a strong toolkit for clean, maintainable design and lets you speak confidently during system design interviews.

More from this blog

B

bugfree.ai

363 posts

bugfree.ai is an advanced AI-powered platform designed to help software engineers and data scientist to master system design and behavioral and data interviews.