Analysis

Compare patterns

Evaluate design patterns side by side across intent, tradeoffs, languages, and integration fit.

Choose patterns

Select up to 3 patterns

Current selection

3 of 3 selected

You can now review the differences across the comparison table below.

Analysis

Pattern comparison

Reviewing 3 patterns.

Criteria
creationalAbstract FactoryView pattern
structuralAdapterView pattern
structuralFacadeView pattern
Basics
Categorycreationalstructuralstructural
SummaryProvide an interface for creating families of related objects without specifying their concrete classes.Convert the interface of a class or module into another interface clients expect.Provide a simplified high-level interface that coordinates a complex subsystem behind a smaller and easier-to-use API.
IntentProvide an interface for creating families of related objects without specifying their concrete classes.Allow incompatible interfaces to work together without changing the consuming code.Provide a simplified high-level interface that coordinates a complex subsystem behind a smaller and easier-to-use API.
Decision factors
ProblemClient code needs to create families of related objects, but hardcoding concrete classes makes the code rigid and hard to swap.A client needs to talk to a legacy class or external service whose interface does not match the rest of the codebase.A client needs to perform a recurring workflow that spans several subsystem classes, but direct coordination makes the code noisy and tightly coupled.
Tradeoffs
  • Adds an extra abstraction layer.
  • Can overcomplicate simple object creation.
  • Makes family-wide swapping and consistency much easier.
  • Adds an extra layer of indirection.
  • Can hide useful vendor-specific capabilities if overused.
  • Keeps integration code isolated from core domain logic.
  • Can become a dumping ground if boundaries are unclear.
  • May obscure useful lower-level capabilities from advanced consumers.
  • Simplifies the most common entry points for the system.
Practical fit
Languages
  • typescript
  • java
  • python
  • react
  • angular
  • csharp
  • dotnet
  • typescript
  • java
  • python
  • go
  • csharp
  • dotnet
  • react
  • angular
  • react-native
  • typescript
  • java
  • python
  • angular
  • react
  • react-native
  • csharp
  • dotnet
Platforms
  • applications
  • ui systems
  • integration layers
  • applications
  • apis
  • service layers
  • integrations
  • applications
  • apis
  • service layers
Integration notesAbstract Factory is especially useful when your app must produce matching sets of related objects for a theme, provider, platform, or pipeline.Adapters are useful when exposing a stable boundary over a legacy API, vendor SDK, or payload format mismatch.Facades are useful when exposing a stable boundary over a multi-service or mixed-language backend, or when presenting a consistent UI entry point over multiple readiness checks.