Software Engineering Design
Patterns
Architectural Principles and Object-Oriented Patterns | Software Architecture Documentation
1. Principles of Object-Oriented Design (SOLID)
Maintainable and scalable software systems rely on fundamental object-oriented design principles:
Single Responsibility Principle (SRP) A class should have only one reason to change, focusing
entirely on a single logical responsibility.
Open/Closed Principle (OCP) Software entities should be open for extension, but closed for direct
code modification.
Liskov Substitution Principle (LSP) Subtypes must be completely substitutable for their base types
without altering system correctness.
Interface Segregation Principle (ISP) Clients should not be forced to depend upon methods and
interfaces they do not consume.
Dependency Inversion Principle (DIP) High-level modules should depend on abstract interfaces
rather than concrete implementations.
2. Common Design Patterns
Design patterns provide reusable architectural solutions to standard object-oriented design problems:
Creational - Singleton Ensures a class has only a single instance globally while providing a unified
access point.
Creational - Factory Method Defines an interface for creating objects while letting subclasses decide
which class to instantiate.
Structural - Adapter Allows objects with incompatible interfaces to collaborate by wrapping their
execution calls.
Behavioral - Observer Establishes a subscription mechanism to notify multiple dependent objects
automatically upon state changes.