Playing with abstract factory design pattern