Welcome to the Low-Level Design (LLD) repository! This repository is a comprehensive collection of Java-based projects that demonstrate key LLD principles and design patterns through practical examples. Each concept is accompanied by a flow diagram to help visualize the design process and structure.
- Introduction
- Concepts Covered
- Design Patterns Implemented
- Project Structure
- Getting Started
- Contributing
- License
This repository aims to provide a hands-on approach to understanding and applying Low-Level Design principles in software development. By working through these examples, you'll gain a deeper understanding of how to design scalable, maintainable, and efficient software systems.
The repository covers a wide range of LLD concepts, including but not limited to:
- SOLID Principles: A set of five design principles intended to make software designs more understandable, flexible, and maintainable.
- Design Patterns: Reusable solutions to common problems in software design. These patterns help improve code readability and flexibility.
- Single Responsibility Principle
- Open/Closed Principle
- Liskov Substitution Principle
- Interface Segregation Principle
- Dependency Inversion Principle
- Example: Creating related objects, such as different types of cars, without specifying their concrete classes.
- Example: A base pizza class with dynamic addition of toppings, allowing for flexible and extendable code.
- Example: Luxury Car and Average Car factory, demonstrating how to create objects without exposing the instantiation logic to the client.
- Example: Weather notification system where observers (users) are notified of updates, ensuring decoupled communication between objects.
- Example: Tic-Tac-Toe game strategy, showcasing how to define a family of algorithms, encapsulate each one, and make them interchangeable.
The repository is organized into folders, each representing a specific LLD concept or design pattern:
LLD-java/
│
├── AbstractFactoryPattern/
│
├── DecoratorDesignPattern/
│
├── FactoryPatternDesign/
│
├── ObserverDesignPattern/
│
├── SOLID/
│
├── StrategyDesignPattern/
│
└── TicTacToe/