content: package com.iluwatar.lazy.loading;
  
  /**
   * 
   * Lazy loading idiom defers object creation until needed.
   * 
   * This example shows different implementations of the pattern
   * with increasing sophistication.
   * 
   * Additional information and lazy loading flavours are described in
   * http://martinfowler.com/eaaCatalog/lazyLoad.html
   *
   */
  public class App 
  {
      public static void main( String[] args ) {
      	
      	// Simple lazy loader - not thread safe
      	HolderNaive holderNaive = new HolderNaive();
      	Heavy heavy = holderNaive.getHeavy();
      	System.out.println("heavy=" + heavy);
      	
      	// Thread safe lazy loader, but with heavy synchronization on each access
      	HolderThreadSafe holderThreadSafe = new HolderThreadSafe();
      	Heavy another = holderThreadSafe.getHeavy();
      	System.out.println("another=" + another);
      	
      	// The most efficient lazy loader utilizing Java 8 features
      	Java8Holder java8Holder = new Java8Holder();
      	Heavy next = java8Holder.getHeavy();
      	System.out.println("next=" + next);
      }
  }
  