定义
定义一个用于创建对象的接口,让子类决定实例化哪个类。
使用场景
- 隐藏创建的具体类型。
- 通过扩展的方式,指定创建对象的类型。
Java 代码示例
- 使用 new 创建对象
public abstract class Model {
}
public class ModelA extends Model {
}
public abstract class Factory {
public abstract Model createModel();
}
public class ModelAFactory extends Factory {
@Override
public Model createModel() {
return new ModelA();
}
}
ModelAFactory factory = new ModelAFactory();
ModelA modelA = factory.createModel();
- 使用反射创建对象
public abstract class Factory {
public abstract <T extends Model> T createModel(Class<T> clz);
}
public class ConcreteModelFactory extends Factory {
@Override
public <T extends Model> T createModel(Class<T> clz) {
T model = null;
try {
model = (T) Class.forName(clz.getName()).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return model;
}
}
ConcreteModelFactory factory = new ConcreteModelFactory();
ModelA modelA = factory.createModel(ModelA.class);
- 简单工厂模式
public class Factory {
public static Model createModel() {
return new ModelA();
}
}