Creator
Assign object creation responsibility to the class best suited to create instances
Assign object creation responsibility to the class best suited to create instances
Assign responsibility to an intermediate object that mediates between other objects
Assign responsibility to the class that has the information needed to fulfill it
Minimize dependencies between classes to improve flexibility, testability, and maintainability
Create artificial classes to represent operations when assigning to domain objects would violate other principles