Layered Initialization

Origin: Grand 98
Reason: The logic to select which of many classes to instantiate is common to all the classes.
Synopsis: Encapsulate common and specialized logic to create objects when common logic is used to select the class of the objects to create.
Example: Create a database query object whose class depends on the specific database been queried. The creation executes a common piece of code that determines which class to instantiate.
Solution:
Service The class that manages the creation of the objects that implement ServiceImplIF. The only visible class of the pattern.  
ServiceImplIF Interface or abstract class of the objects created by Service. QueryIF
ServiceImpli Concrete classes implementing ServiceImplIF. OracleQuery
SybaseQuery
ServiceImplFactory The class that creates the objects that implement ServiceImplIF.  
See also: The creational patterns