In object oriented programming (OOP) we are dealing with classes as the main 'unit' of our code. Classes represent the blueprints to the objects that will have some kind of business logic inside of it. Often times our classes need to interact with one another. This is when the coupling of the code happens. How do we handle this coupling? There are a few design patterns that can help with that.