Abstract Factory impr.