设计模式 | 工厂方法模式

95 阅读1分钟

定义

定义一个用于创建对象的接口,让子类决定实例化哪个类。

使用场景

  • 隐藏创建的具体类型。
  • 通过扩展的方式,指定创建对象的类型。

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();
    }
}