Complete Abstract Factory design pattern