Produce families of related objects — a light-theme button always pairs with a light-theme checkbox, never a dark one — without the caller ever naming a concrete class.
Implement `LightFactory`/`DarkFactory`, each creating a matching Button + Checkbox pair, and getFactory(theme) to pick the right family.
solve('dark') → { button: 'dark-button', checkbox: 'dark-checkbox' }
Sample tests