The abstract factory pattern