Problem Statement
When a system has multiple dimensions of variation, combining them directly leads to a large number of classes that are hard to maintain and extend. For example, if you have different types of devices and different ways to control them, creating a class for every combination causes code duplication and rigidity.
