Information expert (Using the principle of information expert, a general approach to assigning responsibilities is to look at a given responsibility, determine the information needed to fulfill it, and then determine where that information is stored.)
Creator (In general, Assign class B the responsibility to create object A if one, or preferably more, of the following apply:
Instances of B contain or compositely aggregate instances of A
Instances of B record instances of A
Instances of B closely use instances of A
Instances of B have the initializing information for instances of A and pass it on creation.)
Controller (The controller pattern assigns the responsibility of dealing with system events to a non-UI class that represents the overall system or a use case scenario. A controller object is a non-user interface object responsible for receiving or handling a system event.)
Inderection (The indirection pattern supports low coupling and reuses potential between two elements by assigning the responsibility of mediation between them to an intermediate object.)
Low coupling (lower dependency between the classes,
change in one class having a lower impact on other classes,
higher reuse potential.)
High cohesion (High cohesion is an evaluative pattern that attempts to keep objects appropriately focused, manageable and understandable.)
Polymorphism (The user of the type should use polymorphic operations instead of explicit branching based on type.)
Protected variations ( Identify points of predicted variation or instability;)
Pure fabrication (A pure fabrication is a class that does not represent a concept in the problem domain, specially made up to achieve low coupling, high cohesion.)