工厂模式:来一个加工一个。
一个实例对象需要创建一个类,并在实现工厂中创建一个对应该类的对象
//创建一个获取形状类型的对象(根据传值返回不同的类的对象)
public Shape getShape(String shapeType){
if(shapeType == null){
return null;
}
if(shapeType.equalsIgnoreCase("circle")){
return new Circle();
}else if(shapeType.equalsIgnoreCase("square")){
return new Square();
}else{
return null;
}
}
//改进:利用反射可以去掉对实现工厂的修改,只需要新增类就可以
public static <T> T getClass(Class<? extends T> clazz) {
T obj = null;
try {
obj = (T) Class.forName(clazz.getName()).newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return obj;
}
// 调用的时候可以利用多肽去掉类型强制转换
Rectangle rect = ShapeFactory.getClass(Rectangle.class);
rect.draw();
Shape square = ShapeFactory.getClass(Square.class);
square.draw();