How can an application or class be independent of how its objects are created? How can the way objects are created be specified in separate configuration files? How can an application support different configurations?