using lazy initialization to instantiate the object the first time it is requested (lazy initialization pattern)
come from :http://en.wikipedia.org/wiki/Lazy_initialization_pattern
come from :http://en.wikipedia.org/wiki/Lazy_initialization_pattern