Builder pattern
AbstractFactory Sample