Actual object,
public class ExpensiveType implements Cloneable { public int i=0; public ExpensiveType(){ System.out.println("Expensive Object creation"); i=new Random(10).nextInt(); } public int getI(){ return i; } public void setI(int i){ this.i=i; } public ExpensiveType clone() throws CloneNotSupportedException{ ExpensiveType clone=(ExpensiveType)super.clone(); return clone; } }A factory to hold reference to once created expensive object,
public class PrototypeFactory { private PrototypeFactory(){} private static PrototypeFactory s_instance=new PrototypeFactory(); public static PrototypeFactory getInstance(){ return s_instance; } private ExpensiveType actualObject=null; public ExpensiveType prototypeExpensiveObject() throws CloneNotSupportedException{ if(actualObject==null) actualObject=new ExpensiveType(); return (ExpensiveType) actualObject.clone(); } }client,
public class ActualObjectClient { public static void main(String...strings ){ try { ExpensiveType object=PrototypeFactory.getInstance().prototypeExpensiveObject(); System.out.println(object.getI()); object.setI(99); System.out.println(object.getI()); object=PrototypeFactory.getInstance().prototypeExpensiveObject(); System.out.println(object.getI()); } catch (CloneNotSupportedException e) { } } }sample output,
Expensive Object creation -1157793070 99 -1157793070
No comments:
Post a Comment