public class factory { 
factory
public factory() { } letter letter() { return new letter(); } envelope envelope() { return new envelope(); } };
  public class envelope { 
envelope
letter impl; public envelope() { factory f = new factory(); impl = f.letter(); // obtained from factory } public void message() { impl.message(); } };

slide: Factory