Example of using a class cluster or abstract factory design pattern