class ApplicationClass   {

   AbstractWidget a;

   AbstractWidget b;

   AbstractWidget prototype;

  

   public ApplicationClass(AbstractWidget cloneMe ) {

      prototype = cloneMe;

   }

     

   public appMethod1()   {

      AbstractWidget d = prototype.clone();

      d.widgetMethod1();

      // . . .

      AbstractWidget e = prototype.clone();

      // . . .

   }

 

   // ...etc. etc...

}

 

Elsewhere:

ApplicationClass test =

   new ApplicationClass( new Widget() );

 

ApplicationClass testB =

   new ApplicationClass( new WidgetB() );