Design Patterns in Object-Oriented Programming
A refined collection of timeless software architecture patterns for elegant, maintainable code
Creational Patterns
Factory Design Pattern
Define an interface for creating objects while allowing subclasses to decide the instantiation
→Abstract Factory Design Pattern
Provide an interface for creating families of related or dependent objects
→Builder Design Pattern
Separate the construction of a complex object from its representation
→Prototype Design Pattern
Create new objects by copying existing objects instead of instantiating new ones
→Singleton Design Pattern
Ensure a class has only one instance and provide a global point of access
→Structural Patterns
Adapter Design Pattern
Convert the interface of a class into another interface clients expect
→Bridge Design Pattern
Decouple an abstraction from its implementation so both can vary independently
→Composite Design Pattern
Compose objects into tree structures to represent part-whole hierarchies
→Decorator Design Pattern
Attach additional responsibilities to an object dynamically
→Facade Design Pattern
Provide a simplified interface to a complex subsystem
→Flyweight Design Pattern
Reduce memory usage by sharing common object state
→Proxy Design Pattern
Provide a surrogate or placeholder to control access to another object
→Behavioral Patterns
Mediator Design Pattern
Define an object that centralizes communication between objects
→Memento Design Pattern
Capture and restore an object’s internal state without violating encapsulation
→Interpreter Design Pattern
Define a grammar and interpret sentences in a language
→Observer Design Pattern
Define a one-to-many dependency so observers are notified of state changes
→Command Design Pattern
Encapsulate a request as an object, allowing parameterization and queuing
→Iterator Design Pattern
Provide a way to access elements of a collection sequentially
→Chain of Responsibility Design Pattern
Pass requests along a chain of handlers until one handles it
→