An example of the Abstract Factory design pattern