awesome-design-patterns
A curated list of software and architecture related design patterns.
Top Related Projects
An ultra-simplified explanation to design patterns
Design patterns implemented in Java
Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.
📝 Algorithms and data structures implemented in JavaScript with explanations and links to further readings
Everything you need to know to get the job.
A complete computer science study plan to become a software engineer.
Quick Overview
The DovAmir/awesome-design-patterns repository is a curated list of software and architecture design pattern resources. It serves as a comprehensive collection of links to articles, books, videos, and tools related to various design patterns across different programming paradigms and architectures.
Pros
- Extensive collection of resources covering a wide range of design patterns
- Well-organized structure, categorizing patterns by type and technology
- Regularly updated with new and relevant content
- Community-driven, allowing contributions from developers worldwide
Cons
- May be overwhelming for beginners due to the vast amount of information
- Some links may become outdated over time
- Lacks in-depth explanations or examples within the repository itself
- Primarily focuses on linking to external resources rather than providing original content
Note: As this is not a code library but a curated list of resources, the code example and quick start sections have been omitted.
Competitor Comparisons
An ultra-simplified explanation to design patterns
Pros of design-patterns-for-humans
- More beginner-friendly with simple explanations and real-world analogies
- Focuses on practical implementation with code examples in PHP
- Provides a step-by-step guide for each pattern
Cons of design-patterns-for-humans
- Limited to a subset of design patterns (22 patterns covered)
- Less comprehensive in terms of resources and references
- Primarily focuses on PHP, which may not be suitable for all developers
Code Comparison
design-patterns-for-humans (PHP):
interface Lion
{
public function roar();
}
class AfricanLion implements Lion
{
public function roar()
{
// Implementation
}
}
awesome-design-patterns (Language-agnostic):
No specific code examples provided.
The repository focuses on curating links
to resources rather than providing
code implementations.
Summary
design-patterns-for-humans is an excellent resource for beginners looking to understand design patterns with practical PHP examples. It offers a more focused and guided approach to learning.
awesome-design-patterns, on the other hand, is a comprehensive collection of resources covering a wide range of design patterns across various programming languages and domains. It serves as a valuable reference for developers seeking in-depth knowledge and diverse perspectives on design patterns.
Choose design-patterns-for-humans for a beginner-friendly, PHP-focused guide, or awesome-design-patterns for a broader, more extensive collection of design pattern resources across multiple languages and domains.
Design patterns implemented in Java
Pros of java-design-patterns
- Provides concrete Java implementations for each design pattern
- Includes detailed explanations and UML diagrams for each pattern
- Offers a more hands-on, practical approach to learning design patterns
Cons of java-design-patterns
- Limited to Java language, not suitable for developers using other languages
- May be overwhelming for beginners due to the large number of patterns and implementations
- Requires more time to navigate and understand compared to a curated list
Code Comparison
java-design-patterns (Singleton pattern):
public final class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
awesome-design-patterns (no code examples, only links to resources):
- [Singleton](https://en.wikipedia.org/wiki/Singleton_pattern)
- [Factory Method](https://en.wikipedia.org/wiki/Factory_method_pattern)
- [Abstract Factory](https://en.wikipedia.org/wiki/Abstract_factory_pattern)
Summary
java-design-patterns offers a comprehensive, Java-specific resource with concrete implementations and detailed explanations. It's ideal for Java developers seeking practical examples. awesome-design-patterns provides a curated list of resources across multiple languages and domains, making it more suitable for developers looking for a broader overview or working with different technologies.
Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.
Pros of system-design-primer
- Comprehensive coverage of system design concepts and principles
- Includes practical examples and case studies
- Offers interactive learning resources and exercises
Cons of system-design-primer
- More focused on system architecture than specific design patterns
- May be overwhelming for beginners due to its extensive content
- Requires more time investment to fully utilize the resources
Code comparison
While both repositories primarily focus on concepts rather than code, system-design-primer does include some code examples:
# system-design-primer example: URL shortener
def encode(num):
characters = string.digits + string.lowercase + string.uppercase
base = len(characters)
encoding = ''
while num > 0:
encoding = characters[num % base] + encoding
num //= base
return encoding
awesome-design-patterns doesn't typically include code snippets, instead focusing on linking to external resources.
Summary
system-design-primer is a comprehensive resource for learning system design concepts, offering in-depth explanations and practical examples. It's particularly useful for those preparing for system design interviews or looking to deepen their understanding of large-scale systems.
awesome-design-patterns serves as a curated list of resources on various design patterns, providing links to articles, books, and tools. It's more focused on specific design patterns and offers a broader overview of different pattern types.
Both repositories are valuable for developers, with system-design-primer being more suited for those seeking a deep dive into system architecture, while awesome-design-patterns is better for quick reference and exploration of various design patterns.
📝 Algorithms and data structures implemented in JavaScript with explanations and links to further readings
Pros of javascript-algorithms
- Focuses specifically on JavaScript implementations of algorithms and data structures
- Provides detailed explanations and examples for each algorithm
- Includes time and space complexity analysis for most algorithms
Cons of javascript-algorithms
- Limited to JavaScript, while awesome-design-patterns covers multiple languages
- Doesn't cover higher-level software design patterns
- May be overwhelming for beginners due to its depth and complexity
Code Comparison
javascript-algorithms:
function bubbleSort(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
awesome-design-patterns:
# No specific code examples provided in the repository
# Instead, it offers links to resources explaining various design patterns
The javascript-algorithms repository provides concrete implementations of algorithms, while awesome-design-patterns serves as a curated list of resources for learning about design patterns across different programming languages and paradigms.
Everything you need to know to get the job.
Pros of interviews
- Focuses specifically on coding interview preparation
- Includes actual code implementations of algorithms and data structures
- Provides a comprehensive list of common interview questions
Cons of interviews
- Limited scope compared to the broader design patterns coverage
- May not be as relevant for experienced developers focused on architecture
- Less emphasis on high-level software design concepts
Code comparison
interviews:
public ListNode reverseList(ListNode head) {
ListNode prev = null;
while (head != null) {
ListNode next = head.next;
head.next = prev;
prev = head;
head = next;
}
return prev;
}
awesome-design-patterns:
No direct code examples provided. The repository focuses on curating links to resources about design patterns rather than implementing them.
Summary
interviews is a repository tailored for coding interview preparation, offering concrete implementations and practice problems. awesome-design-patterns, on the other hand, serves as a comprehensive resource for various design patterns across different domains of software development. While interviews is more practical for job seekers and those improving coding skills, awesome-design-patterns is better suited for developers looking to enhance their overall software design knowledge and architectural understanding.
A complete computer science study plan to become a software engineer.
Pros of coding-interview-university
- Comprehensive curriculum covering a wide range of computer science topics
- Structured learning path with clear goals and milestones
- Includes practical advice for job interviews and career development
Cons of coding-interview-university
- Focuses primarily on interview preparation rather than real-world application
- May be overwhelming for beginners due to the extensive content
- Less emphasis on design patterns and architectural concepts
Code comparison
While both repositories don't primarily focus on code examples, coding-interview-university does include some code snippets for algorithm implementations:
# Example from coding-interview-university
def binary_search(list, item):
low = 0
high = len(list) - 1
while low <= high:
mid = (low + high) // 2
guess = list[mid]
if guess == item:
return mid
if guess > item:
high = mid - 1
else:
low = mid + 1
return None
awesome-design-patterns, on the other hand, focuses more on providing links to resources rather than code examples. However, it may include some code snippets within the linked articles to illustrate design pattern implementations.
In summary, coding-interview-university is more suitable for those preparing for technical interviews and building a strong computer science foundation, while awesome-design-patterns is better for developers looking to improve their software design skills and learn about various architectural patterns.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Awesome Software and Architectural Design Patterns
A curated list of software and architecture related design patterns.
Software design pattern - A general, reusable solution to a commonly occurring problem within a given context in software design. It is a description or template for how to solve a problem that can be used in many different situations.
Contents
- Programming language design patterns
- General Architecture
- Cloud Architecture
- Serverless Architecture
- Micro services & Distributed Systems
- Internet of things
- Big Data
- Machine Learning
- Databases and storage
- DevOps & containers
- Mobile
- Front End Development
- Security
Programming Language Design Patterns
-
AngularJS
-
C#
- design-patterns
- design-patterns-for-human - ultra simplified explanation to design patterns.
- Design Patterns Library
-
C++
-
Closure
-
Go
-
Java
- sourcemaking - patterns and anti patterns.
- oodesign - patterns catalog with UML diagrams.
- design-patterns
- effective-java patterns - patterns from the Effective Java book.
- Design patterns implemented in Java
- Effective-Java-3rd-Joshua-Bloch
-
JavaScript
- es6 design patterns
- humans - ultra simplified explanation to design patterns.
- design-patterns
- design patterns by addy osmani
-
Kotlin
-
Node
-
Object Oriented
-
PHP
- humans - ultra simplified explanation to design patterns.
- design-patterns
-
Python
- design-patterns
- PyPattyrn - A simple library for implementing common design patterns.
- Python Design Patterns
- Design Patterns in Python
- Django Design Patterns and Best Practices
-
React
-
Ruby
-
Rust
-
Scala
-
Swift
-
TypeScript
-
UML
-
Vue.js
- Vue Patterns - Useful Vue patterns, techniques, tips and tricks and curated helpful links.
-
Elixir
-
the-pipeline - The Pipeline is defined by a collection of functions that take a data structure as an argument and return the same type of data structure
General Architecture
- 10 common architectural patterns - 10 Common software architectural patterns in a nutshell.
- reactive design patterns - This website accompanies the book Reactive Design Patterns by Roland Kuhn.
- scalable System Design Patterns - Scalable system design techniques.
- martin fowler - Catalog of Patterns of Enterprise Application Architecture.
- system-design-primer - Design large-scale systems.
- architecting-for-reliability - Architecting for Reliability Part 1/3.
- InnerSource Patterns - Patterns for implementing InnerSource, the use of open source principles and practices for software development within the confines of an organization.
Cloud Architecture
- Cloud cost hacking - Patterns for reducing cloud costs.
- AWS cloud design patterns - The AWS Cloud Design Patterns (CDP).
- Azure cloud design patterns - Building reliable, scalable, secure applications in the cloud.
- cloud computing patterns - Cloud Computing Patterns.
- Google Cloud Solutions - Real business cases solutions with diagrams on GCP.
- saas tenant isolation strategies - Isolating Resources in a Multi-Tenant Environment
- design patterns for multi-tenancy - Architectural design patterns for multi-tenancy on AWS
Serverless Architecture
- serverless architecture - Serverless Architecture: Five Design Patterns.
- solving problems in serverless - Patterns for Solving Problems in Serverless Architectures.
- serverless patterns - serverless microservice patterns for aws.
- serverless-reference-architectures - serverless microservice patterns with deployment scripts.
- serverless-patterns-collection - Serverless Patterns Collection.
- serverless-design-patterns-and-best-practices
Micro services & Distributed Systems
- microservices - A pattern language for microservices.
- microservices-anti patterns - Microservices antipatterns and pitfalls.
- 12factor - The twelve-factor methodology.
- microservices-sync-vs-async - Microservices patterns, synchronous and asynchronous.
- message-queues - Comparing-message-queue-architectures.
- enterprise Integration Patterns - Patterns and Best Practices for Enterprise Integration.
- martinfowler - Patterns of Distributed Systems.
Internet of things
- iot-communication-patterns - Strengths and Weaknesses of IoT Communication Patterns.
- design-patterns-for-iot - A Design Pattern Framework for IoT Architecture.
Big Data
- mapreduce-patterns - Map-reduce patterns.
- streaming-realtime-analytics - 13 Stream Processing Patterns for building Streaming and Realtime Applications.
Machine Learning
- distributed-ml-patterns - Distributed machine learning system patterns.
Databases and Storage
- SQL
- database tenancy patterns - Multi-tenant SaaS database tenancy patterns
- databaseanswers - Industry-specific SQL Data Models in 50 categories.
- database-programmer - Table-design-patterns.
- red-gate - five simple database design errors you should avoid.
- talend - Data model design best practices.
- sqlcheck - Anti-patterns in SQL queries.
- Data warehouse patterns - ETL and ELT design patterns for lake house architecture using Amazon Redshift
- NOSQL
- nosql resilience patterns - Practical NoSQL resilience design pattern for the enterprise.
- nosql-patterns - Pragmatic Programming Techniques.
- mongodb - Mongodb design patterns.
- MongoDB Applied Design Patterns
- DynamoDB design patterns- Advnaced design patterns for Amazon DynamoDB
- Redis applied design patterns - Redis Applied Design Patterns book
- Storage
- storage patterns- Comparing your on-premises storage patterns with AWS Storage services
- S3 Design Patterns - Best Practices Design Patterns: Optimizing Amazon S3 Performance
DevOps & containers
- containerspatterns - There are a Thousand Ways to Use Containers.
- kubernetes - Kubernetes Production Patterns.
- container-design-patterns - Container Design Patterns for Kubernetes Pods Design.
- best-practices-for-shell-scripts - Best practices for shell scripts.
- kubernetes patterns - Presentation around the book kubernetes paterns.
- kubernetes patterns book
- cdk patterns - cdk patterns.
- CDK Construct Catalog - CDK construct catalog.
Mobile
- IOS
- Android
-
design-patterns-for-android - Common Design Patterns for Android.
-
mvc-mvp-and-mvvm - The MVC, MVP, and MVVM Smackdown.
-
Front-End Development
- user Interface - User Interface Design patterns.
- oocss-acss-bem-smacss - OOCSS, ACSS, BEM, SMACSS: what are they? What should I use?
- css-protips - A collection of tips to help take your CSS skills pro.
- responsive design patterns - A collection of patterns and modules for responsive designs.
- [front-End Architecture]
- mv* - MVC/MVP/MVVM/CLEAN/VIPER/REDUX/MVI/PRNSAASPFRUICC.
- martinfowler - GUI Architectures.
Security
- opensecurityarchitecture - Security Architecture Patterns.
- martinfowler - Web-security-basics.
- cloud-security - Cloud security architecture intro.
- owasp - Security by Design Principles.
- azure-security - Azure security best practices and patterns.
Books
- Django Design Patterns and Best Practices
- MongoDB Applied Design Patterns
- Design-Patterns-Elements-Reusable-Object-Oriented
- Head-First-Design-Patterns-Brain-Friendly
- Effective-Java-3rd-Joshua-Bloch
- Node.js Design Patterns
- Game Programming Patterns
- Object Design Style Guide
- Spring Boot in Practice
- Designing Microservices
Other Awesome Lists
- Other amazingly awesome lists can be found in the awesome list.
Contributing
- Your contributions are always welcome! Please read the contribution guidelines first.
License
To the extent possible under law, Dov Amir has waived all copyright and related or neighboring rights to this work.
Top Related Projects
An ultra-simplified explanation to design patterns
Design patterns implemented in Java
Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.
📝 Algorithms and data structures implemented in JavaScript with explanations and links to further readings
Everything you need to know to get the job.
A complete computer science study plan to become a software engineer.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot