It is not a performance issue so much as a getting the design pattern to work problem. By making it static it means that all instances are sharing the same hashmap - which means that they can all actually find the factories just by creating an abstract factory and grabbing one out of the hashmap (presuming something else has initialised the factories) This greatly eases the burdern of parenthood seeking.