工厂模式用于实现逻辑的封装,并通过公共的接口提供对象的实例化服务,在添加新的类时装修要做少量的修改。
1.简单工厂模式
通过反射机制进行类注册的简单工厂模式
- 通过反射机制注册产品类对象和实例化
- 注册产品对象并向每个产品添加newInstance方法,该方法返回与自身类型相同的新实例
//实例对象父类
public class Vehicle {
}
//vehicle工厂类public class VehichleFactory {
// 用map对象保存产品ID及其对应的分类
private static Map<String, Class> registeredProducts = new HashMap<String, Class>();
// 注册vehicle
public void registerVehicle(String type,Class vehicleClass) {
registeredProducts.put(type, vehicleClass);
}
//获取vehicle实列对象
public Vehicle createVehicle(String type) throws InstantiationException, IllegalAccessException {
Class vehicleClass = registeredProducts.get(type);
return (Vehicle) vehicleClass.newInstance();
}
}
在某些情况下,反射机制并不适用。比如,反射机制需要权限,这在某些特定的环境是无法实现的。反射机制也会降低程序的运行效率,在对性能要求较高的场景下应该避免使用这种机制。
使用newInstance 方法进行类注册的简单工厂模式
//在基类中添加一个抽象方法
public abstract class Vehicle {
abstract public Vehicle newInstance();
}
public class VehichleFactory {
// 用map对象保存产品ID及其对应的分类
private static Map<String, Vehicle> registeredProducts = new HashMap<String, Vehicle>();
// 注册vehicle
public void registerVehicle(String type,Vehicle vehicle) {
registeredProducts.put(type, vehicle);
}
//获取vehicle实列对象
public VehichleFactory.Vehicle createVehicle(String type) {
return registeredProducts.get(type).newInstance();
}
}