public class Princess implements ExecutorService {
  public static final Princess PADME = new Princess();
  // private member
  private StarShip ship;
  private Princess() {
    this.setDefaultLocale(Locale.EN);
    Timer timer = new Timer();
    TimerTask task = new TimerTask() {
      public void run() {
        Princess.this.changeHairStyle();
        Princess.this.changeClothes();
      }
    };
    timer.scheduleAtFixedRate(task, new Date(), 1000);
  }
}
public class JediKnight implements ExecutorService {
  public static final JediKnight ANAKIN = new JediKnight(false);
  public static final JediKnight OBI_WAN = new JediKnight(false);
  public static final JediKnight YODA = new JediKnight(true);
  private JediKnight(boolean isYoda) {
    if (!isYoda) {
      this.setDefaultLocale(Locale.EN);
    }
    else {
      Locale yodaLocale = Locale.EN;
      this.setDefaultLocale(Utils.shuffle(yodaLocale));
    }
    this.setLightSabre(LightSabreFactory.getInstance());
    this.setGoodLooking(!isYoda);
  }
}
public class Sith {
  public static final Sith LORD = new Sith();
  private Sith() {
    this.setDefaultLocale(Locale.EN);
    this.setClothes(DarkRobeFactory.getInstance());
    this.setLightSabre(LightSabreFactory.getInstance());
  }
}
public static main() {
 // The following line has been commented out so as not
 // to confuse fans who never did it
 // Utils.initChildren(JediKnight.ANAKIN, Princess.PADME);
 // Use JDK 5.0 concurrency package
 Future<set<child>> padmeFuture = Princess.PADME.submit(
   new Callable<set<child>>() {
     public Set<child> call() {
       try {
         int weeks = (int)(36+4.0*Math.random());
   wait(weeks*7*24*60*60*1000);
         this = null;
         System.gc();
       }
       finally() {
         Child boy = new Child("Luke");
         Child girl = new Child("Leia");
         Set<child> result = new HashSet<child>();
         result.add(boy);
         result.add(girl);
         return result;
       }
     }
   }
 );
 if (JediKnight.ANAKIN.poll(padmeFuture) instanceof ThreadDeath) {
   JediKnight.ANAKIN.alarm();
   // use some marketing ideas
   Sith.LORD.promise(JediKnight.ANAKIN, new RuntimePermission("object.restore.afterGC"));
   Sith.LORD.promise(JediKnight.ANAKIN, new RuntimePermission("force.power.dark.*"));
   Sith.LORD.promise(JediKnight.ANAKIN, new RuntimePermission("force.power.*"));
   Sith.LORD.promise(JediKnight.ANAKIN, new RuntimePermission("force.*"));
   JediKnight.ANAKIN.setInternalName("Darth Vader");
   JediKnight.ANAKIN.promise(Princess.PADME, new RuntimePermission("*"));
   Princess.PADME.alarm();
   Princess.PADME.boardShip();
   // Use JDK 5.0 concurrency package
   Future<starship> anakinFuture =
     JediKnight.OBI_WAN.submit(
       new Callable<starship>() {
         public RuntimePermission call() {
           try {
             Class princessClass = Princess.getClass();
             Field shipField = princessClass.getDeclaredField("ship");
             // will never throw SecurityException on Jedi Knight
             shipField.setAccessible(true);
             JediKnight.this.add(new RuntimePermission("object.ship.board.*"));
             return (StarShip)shipField.get(Princess.PADME);
           }
           catch (SecurityException se) {
             // never supposed to happen to Jedi Knight
             System.out.println("Internal error. Contact George Lucas.");
             System.reboot();
           }
         }
       }
     );
   StarShip padmeShip = anakinFuture.call();
   padmeShip.put(JediKnight.OBI_WAN);
   JediKnight.ANAKIN.see(Princess.PADME);
   Princess.PADME.removeLove(JediKnight.ANAKIN);
   JediKnight.ANAKIN.see(JediKnight.OBI_WAN);
   JediKnight.ANAKIN.removeLove(Princess.PADME);
  
   JediKnight.OBI_WAN.removeLimbs(JediKnight.ANAKIN);
   // note - absolutely no need for GC, Anakin will be collected automatically.
   ReferenceQueue<jediknight> sithWatchList = new ReferenceQueue<jediknight>();
   PhantomReference<jediknight> anakinRef = sithWatchList.remove();
   JediKnight anakinPhantom = anakinRef.get();
   Sith DARTH_VADER = Sith.LORD.assemble(anakinPhantom, LimbFactory.getSpareInstances());
   MouthPiece newMouthPiece = MouthPieceFactory.getInstance();
   // no need to check that it works - guaranteed to work with no noise
   DARTH_VADER.add(newMouthPiece);
   DARTH_VADER.rise();
 }
 else {
   // TODO - create alternative scenario for Sith revenge
 }
}