S/W Design
I've discussed various books and their design patterns in my blogs. I highly urge you to read those works for a thorough understanding. You may use the code templates mentioned here. Code templates allow you to experiment with and master design ideas quickly. My goal with this project is to create compilable and runnable code templates for fast learning.
High-level design (HLD)
Important stuff, don't miss it -
Design concepts -
Architectural Patterns.
From Mud To Structure
Layers pattern.
Pipe and filters pattern.
Blackboard
Distributed systems
Broker
Interactive systems.
Model View Controller - MVC.
Presentation Abstraction control - PAC.
Adaptable systems.
Microkernel.
Reflection
Design patterns.
Idioms.
Low-level design (LLD)
Design patterns
Design patterns are all about polymorphism and indirection. Most of them are applied on the object level. Some of them are on the class level. I have inserted many links below that will help you to understand design patterns with example codes.
Note: I'd like to suggest that you read "DESIGN PATTERNS: ELEMENTS OF REUSABLE OBJECT ORIENTED SOFTWARE book."
Structural design pattern - This category of patterns will help us to achieve structural flexibility. Imagine your S/W system as a black box with N number of components/structures. Including (N +1) or removing (N -1) an arrangement should not disturb old/existing structures. Plus, adding or removing them is easily achievable. It will help us to have a smooth maintenance face of SDLC.
Behavioral design pattern - This category of patterns will help us to achieve behavioral flexibility. Imagine your S/W system as a black box with N number of behaviors. What do we mean by behaviors? Functionalities we offer from public APIs. Including (N +1) or removing (N -1) behavior should not disturb existing S/W. Plus, adding or removing behaviors is easily achievable. Our S/W should be easily extendable.
Strategy design pattern. Sometimes called policy pattern.
Creational design pattern - Classes are just a blueprint; instances of those classes (called objects) are the real things. Created in memory. There are many relationships between objects present in OOPs (i.e., Composition, Aggregation, Inheritance, usage, etc.). In enterprise-level big applications, creating an object has many prerequisites. One of them could be - before creating object X. You should have object Y in place. And to create object Y, you should have config files loaded and parsed into the memory. Deleting or cleaning one object should not create dangling pointers/references to other objects. Like different categories of patterns, this category has also been designed to achieve flexibility. Creational flexibility. We should be able to address clean creation/deletion of objects which can become easily extendable for newly created structures/behaviors.
Note: - I want to recommend you to read this book. Below links are for quick UMLs and C++ code reference on those patterns.
Prerequisites
Service Access and Configuration Patterns
Wrapper facade
Component configurator
Interceptor
Extension interface
Event Handling patterns
Proactor
Asynchronous completion token
Acceptor concretor
Synchronization patterns
Scoped locking
Strategized Locking
Thread-Safe Interface
Double-Checked Locking Optimization
Concurrency patterns
Leader - Followers
Thread-Specific Storage