One very common situation that occurs when designing software is the so-called state space explosion where the number of related entities required to represent all possible states “explodes” in a Cartesian product fashion. For example, if you have circles and squares of different colors, you might end up with classes such as RedSquare/BlueSquare/RedCircle/BlueCircle and so on. Clearly nobody wants that.
What we do instead is we ...