This repository serves as a comprehensive guide to Low-Level Design (LLD), aimed at helping developers understand and implement essential design concepts in software development. It contains a collection of:
-
Core Concepts: Key principles and techniques in LLD such as SOLID principles, object-oriented design, and common design patterns.
-
Code Examples: Practical Java code implementations showcasing various design techniques, including dependency injection, design pattern usage, and object modeling.
-
Design Examples: Step-by-step breakdowns of real-world design problems, with detailed explanations of how to design and architect scalable, maintainable software systems.
-
Whether you're preparing for interviews, aiming to improve your design skills, or looking to see best practices in action, this repository provides a solid foundation for mastering Low-Level Design.
SOLID is an acronym for five fundamental principles of object-oriented programming and design that help create more maintainable, flexible, and robust software.
S- Single Responsibility PrincipleO- Open Closed PrincipleL- Liskov Substitution PrincipleI- Interface Segmented PrincipleD- Dependency Inversion Principle
- Design patterns are reusable solutions to commonly occurring problems in software design.
- They represent best practices and proven approaches that experienced developers have identified and documented over time.
- Categories of design patterns include Creational, Structural, and Behavioral patterns.
Creational Patterns: Deal with object creation mechanisms (Singleton, Factory, Builder)Structural Patterns: Deal with object composition and relationships (Adapter, Decorator, Facade)Behavioral Patterns: Deal with communication between objects and assignment of responsibilities (Observer, strategy.Strategy, Command)
| Creational Patterns | Structural Patterns | Behavioral Patterns |
|---|---|---|
| Singleton | Adapter | Chain of Responsibility |
| Factory Method | Bridge | Command |
| Abstract Factory | Composite | Iterator |
| Builder | Decorator | Mediator |
| Prototype | Facade | Memento |
| Flyweight | Observer | |
| Proxy | State | |
| Strategy | ||
| Template Method | ||
| Visitor | ||
| Null Object |
- Design a Parking Lot
- Design a weather PubSub System
- Design a Bank Account System
- Design Linkedin Verdict
- Design a Coffee Vending Machine
- Design a Traffic Signal Control System
- Design a Vending Machine
- Design a LRU Cache
- Design a PubSub Model
- Design a Tic Tac Toe Game
- Design a Library Management System
- Design an Elevator System
- Design a Conference Room Booking System
- Design Splitwise
- Design a Movie Ticket Booking System
- Design Music Streaming Service
- Is-A (Inheritance)
- Has-A (Composition/Aggregation)
| Syntax | Symbol | Meaning | Usage | Line Style | |
|---|---|---|---|---|---|
| `< | --` | Solid | Class inheritance | Concrete or abstract classes | Solid line |
| `< | ..` | Dotted | Interface implementation | Class implements interface | Dotted line |
DAO(Data Access Object): A design pattern that provides an abstract interface to a database or other persistence mechanism.
- Design Patterns with Refactoring Guru
NOTE: This repository was created during my learning journey in Low-Level Design. If you notice any improvements or corrections, feel free to reach out.
