What are the 4 basic categories for design patterns?

Free Coding Questions Catalog
Boost your coding skills with our essential coding questions catalog. Take a step towards a better tech career now!

In software engineering, design patterns are broadly categorized into four fundamental types, each addressing specific aspects of software structure, behavior, and object creation. These categories are:

1. Creational Patterns

Creational patterns focus on the efficient and flexible creation of objects. They provide solutions to instantiate objects while minimizing dependencies and ensuring the objects are created in a controlled manner. By abstracting the instantiation process, creational patterns help manage object creation complexity and enhance flexibility and reuse.

Key Examples

  • Singleton: Ensures a class has only one instance and provides a global point of access.
  • Factory Method: Defines an interface for creating objects, allowing subclasses to alter the type of objects created.
  • Abstract Factory: Creates families of related objects without specifying their concrete classes.
  • Builder: Separates the construction of a complex object from its representation, enabling the same construction process to create different representations.
  • Prototype: Creates new objects by copying an existing object (prototype) rather than creating instances from scratch.

2. Structural Patterns

Structural patterns deal with the organization and composition of classes and objects to form larger, more flexible structures. They focus on relationships between entities to ensure that complex structures are easier to manage and extend without affecting existing code. Structural patterns help organize code to promote readability, efficiency, and extensibility.

Key Examples

  • Adapter: Converts the interface of a class into another interface that clients expect, allowing incompatible interfaces to work together.
  • Composite: Composes objects into tree-like structures to represent part-whole hierarchies, enabling clients to treat individual and composed objects uniformly.
  • Decorator: Dynamically adds responsibilities to objects without altering their structure, allowing for flexible functionality extension.
  • Facade: Provides a simplified interface to a complex subsystem, making it easier for clients to interact with it.
  • Proxy: Acts as a placeholder for another object, controlling access to it (e.g., for lazy loading or access control).
  • Bridge: Decouples an abstraction from its implementation, allowing the two to vary independently.
  • Flyweight: Reduces the cost of creating many similar objects by sharing common parts among them.

3. Behavioral Patterns

Behavioral patterns are concerned with communication between objects and the delegation of responsibilities. They define how objects interact and fulfill their roles, ensuring efficient collaboration and flexibility in changing behaviors. Behavioral patterns help manage complex workflows and interactions, reducing dependencies and promoting code reuse.

Key Examples

  • Observer: Defines a one-to-many dependency, so when one object changes state, all its dependents are notified and updated automatically.
  • Strategy: Encapsulates a family of algorithms, allowing them to be interchangeable and enabling the algorithm to vary independently from the clients that use it.
  • Command: Encapsulates requests as objects, allowing for parameterization of clients with different requests and the ability to queue and log requests.
  • Iterator: Provides a way to access elements of a collection sequentially without exposing its underlying representation.
  • State: Allows an object to change its behavior when its internal state changes, making it appear as if the object’s class has changed.
  • Mediator: Defines an object that centralizes communication between objects, reducing coupling.
  • Chain of Responsibility: Passes a request along a chain of handlers, allowing multiple objects the chance to handle the request.
  • Template Method: Defines the skeleton of an algorithm, allowing subclasses to redefine specific steps without changing the algorithm’s structure.
  • Visitor: Allows adding further operations to objects without modifying them by separating the algorithm from the object structure.

4. Concurrency Patterns

While not one of the original categories from the classic "Gang of Four" design patterns, concurrency patterns have become essential in modern software development, especially for applications that require parallel processing, efficient multitasking, and resource management. These patterns help manage multi-threaded programs, ensuring safe and efficient concurrent execution.

Key Examples

  • Producer-Consumer: Decouples data production and consumption by using a queue to balance the rate of production and consumption.
  • Thread Pool: Manages a pool of threads, allowing a limited number of threads to process tasks, improving resource usage and preventing system overload.
  • Read-Write Lock: Allows multiple threads to read a resource concurrently but only one to write, helping manage access to shared resources.
  • Future/Promise: Represents a result that may not yet be available, allowing tasks to proceed without blocking while waiting for the result.
  • Reactor: Manages multiple service requests delivered concurrently to an application by demultiplexing and dispatching them.

Summary of the 4 Categories

CategoryPurposeExamples
CreationalFocuses on object creation, enhancing flexibility and managing dependenciesSingleton, Factory Method, Abstract Factory, Builder, Prototype
StructuralDeals with organizing and composing objects and classes into larger structuresAdapter, Composite, Decorator, Facade, Proxy, Bridge, Flyweight
BehavioralManages communication and responsibilities among objects, promoting flexibility in interactionsObserver, Strategy, Command, Iterator, State, Mediator, Chain of Responsibility, Template Method, Visitor
ConcurrencySupports efficient handling of concurrent tasks and resource management, especially in multi-threaded appsProducer-Consumer, Thread Pool, Read-Write Lock, Future/Promise, Reactor

Conclusion

The four main categories of design patterns—creational, structural, behavioral, and concurrency—offer solutions to different aspects of software design challenges. Understanding these categories and their representative patterns can help you build more organized, maintainable, and flexible code, enabling you to solve complex problems with well-established approaches. By mastering these patterns, you’ll be better equipped to tackle a wide range of design scenarios in software engineering.

TAGS
System Design Interview
CONTRIBUTOR
Design Gurus Team

GET YOUR FREE

Coding Questions Catalog

Design Gurus Newsletter - Latest from our Blog
Boost your coding skills with our essential coding questions catalog.
Take a step towards a better tech career now!
Explore Answers
What is the salary of AWS?
Is Jira used for agile?
Comparing iterative and recursive solutions for clarity
Related Courses
Image
Grokking the Coding Interview: Patterns for Coding Questions
Grokking the Coding Interview Patterns in Java, Python, JS, C++, C#, and Go. The most comprehensive course with 476 Lessons.
Image
Grokking Data Structures & Algorithms for Coding Interviews
Unlock Coding Interview Success: Dive Deep into Data Structures and Algorithms.
Image
Grokking Advanced Coding Patterns for Interviews
Master advanced coding patterns for interviews: Unlock the key to acing MAANG-level coding questions.
Image
One-Stop Portal For Tech Interviews.
Copyright © 2024 Designgurus, Inc. All rights reserved.