This repository contains examples of commonly used Software Design Patterns implemented in various programming languages. These patterns provide standardized solutions to common design challenges, improving the structure and efficiency of software systems.
- Adapter: Allows incompatible interfaces to work together by wrapping an existing class with a new interface.
- Bridge: Decouples an abstraction from its implementation, allowing both to vary independently.
- Command: Encapsulates a request as an object, allowing parameterization of clients with queues, requests, and operations.
- Composite: Composes objects into tree-like structures to represent hierarchies, allowing clients to treat individual objects and compositions uniformly.
- Facade: Provides a simplified interface to a complex subsystem, making it easier to use.
- Iterator: Provides a way to access elements of an aggregate object sequentially without exposing its underlying structure.
- Mediator: Defines an object that encapsulates how objects interact, promoting loose coupling.
- Observer: Allows objects to be notified of changes in other objects without tightly coupling them.
- Proxy: Provides a surrogate or placeholder for another object to control access.
- Template Method: Defines the structure of an algorithm in a superclass, allowing subclasses to redefine specific steps.
Clone this repository to explore and experiment with the patterns:
git clone https://github.com/jfzulu/Software-Design-Patterns.git
cd Software-Design-Patterns