package design; /** * Created by Administrator on 2018/4/26. */ public interface Shape { void draw(); void erase(); }
package design; import java.util.HashMap; import java.util.Map; /** * Created by Administrator on 2018/4/26. */ abstract class ShapeFactory { protected abstract Shape create(); private static Map factories=new HashMap(); public static void addFactory(String id,ShapeFactory f){ factories.put(id,f); } public static final Shape createShape(String id){ if(!factories.containsKey(id)){ try { Class.forName("factory.shapefact2."+id); }catch (Exception e){ throw new RuntimeException("Bad shape creation:"+id); } if(!factories.containsKey(id)){ throw new RuntimeException("Bad shape creation:"+id); } } return ((ShapeFactory)factories.get(id)).create(); } }
package design; /** * Created by Administrator on 2018/4/26. */ public class Circle implements Shape { public Circle(){} public void draw() { System.out.println("Circle.draw"); } public void erase() { System.out.println("Circle.erase"); } private static class Factory extends ShapeFactory{ protected Shape create() { return new Circle(); } } static { ShapeFactory.addFactory("Circle",new Factory()); } }
package design; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; /** * Created by Administrator on 2018/4/26. */ public class ShapeFactory2 { String[] shlist={"Circle"}; List shapes=new ArrayList(); public void test(){ Iterator it= Arrays.asList(shlist).iterator(); while (it.hasNext()){ shapes.add(ShapeFactory.createShape((String)it.next())); } it=shapes.iterator(); while (it.hasNext()){ Shape s=(Shape) it.next(); s.draw(); s.erase(); } } }