## GRASP Design Patterns
General Responsibility Assignment Software Patterns are a set of guidelines and principles that help in designing object-oriented software systems; they set the conceptual foundation for GoF Design Patterns. GRASP patterns focus on responsibility assignment and overall system architecture that promotes loose coupling, high cohesion, and maintainability. Here is a brief overview of some key GRASP patterns:
1. **Creator:** This pattern guides the allocation of responsibility for object creation. It suggests that a class should be responsible for creating instances of other classes when it has the necessary information or context.
2. **Information Expert:** This pattern suggests that a class should be assigned a responsibility if it possesses the required information to fulfill that responsibility. It promotes assigning responsibilities to the class with the most relevant information.
3. **Controller:** The Controller pattern helps in defining the central coordinator class that handles system events or external requests. It separates user interface-related responsibilities from domain-specific responsibilities.
4. **Low Coupling:** This principle encourages designing classes and their interactions with minimal dependencies. It promotes loose coupling to enhance system flexibility and maintainability.
5. **High Cohesion:** High Cohesion advises that classes should have a single, well-defined purpose or responsibility. It encourages organizing code in a way that keeps related functionality together.
6. **Polymorphism:** Polymorphism emphasizes the use of interfaces and inheritance to allow objects of different classes to be used interchangeably. It enables designing systems that are flexible and extensible.