import java.util.HashMap;
import java.util.Map;

public class ShapeFactory {
  /** 定义形状类型常量 */
  public static final int SHAPE_TYPE_CIRCLE=1;
  public static final int SHAPE_TYPE_RECTANGLE=2;
  public static final int SHAPE_TYPE_LINE=3;

  private static Map<Integer,String> shapes=new HashMap<Integer,String>();

  static{  //静态代码块，当Java虚拟机加载ShapeFactory类的代码时，就会执行这段代码
    // 建立形状类型和形状类名的对应关系 
    shapes.put(new Integer(SHAPE_TYPE_CIRCLE),"Circle");
    shapes.put(new Integer(SHAPE_TYPE_RECTANGLE),"Rectangle");
    shapes.put(new Integer(SHAPE_TYPE_LINE),"Line");
  }
  /** 构造具体的Shape对象，这是一个静态方法 */
  public static Shape getShape(int type){
    try{
      //获得与形状类型匹配的形状类名
      String className=shapes.get(new Integer(type));
      //运用Java反射机制构造形状对象
      return (Shape)Class.forName(className).newInstance();
    }catch(Exception e){return null;}
  }
}



/****************************************************
 * 作者：孙卫琴                                     *
 * 来源：<<Java面向对象编程>>                       *
 * 技术支持网址：www.javathinker.net                *
 ***************************************************/
