在代码中,通常需要一些复杂的对象创建工作,以使这些对象达到一种可以使用的状态。通常情况下,这种创建不过是新建对象实例,并以我们需要的方式进行工作。但是,有时候这种创建对象的需求会极具增长,并且混淆了创建对象的原始代码。这时,工厂类就派上用场了。关于工厂模式更全面的描述可以参考这里。最复杂的工厂模式是使用抽象工厂创建对象族。而我们只是使用最基本的方式,用一个工厂类创建一个特殊类的实例。来看下面的代码:
public class PoliceCarController {
public PoliceCar New(int mileage, Boolean serviceRequired) {
PoliceCar policeCar = new PoliceCar();
policeCar.ServiceRequired = serviceRequired;
policeCar.Mileage = mileage;
return policeCar;
}
}
如您所见,New方法负责创建PoliceCar并根据一些外部输入初始化PoliceCar的某些属性。对于简单的创建工作来说,这样做可以从容应对。但是久而久之,创建的工作量越来越大,并且被附加在controller类上,但这并不是controller类的职责。这时,我们可以将创建代码提取到一个Factory类中去,由该类负责PoliceCar实例的创建。
public interface IPoliceCarFactory {
PoliceCar Create(int mileage, Boolean serviceRequired);
}
public class PoliceCarFactory extends IPoliceCarFactory {
@Override
public PoliceCar Create(int mileage, Boolean serviceRequired) {
PoliceCar policeCar = new PoliceCar();
policeCar.ReadForService = serviceRequired;
policeCar.Mileage = mileage;
return policeCar;
}
}
public class PoliceCarController {
public IPoliceCarFactory PoliceCarFactory;//getter setter
public PoliceCarController(IPoliceCarFactory policeCarFactory) {
PoliceCarFactory = policeCarFactory;
}
public PoliceCar New(int mileage, Boolean serviceRequired) {
return PoliceCarFactory.Create(mileage, serviceRequired);
}
}
由于将创建的逻辑转移到了工厂中,我们可以添加一个类来专门负责实例的创建,而不必担心在创建或复制代码的过程中有所遗漏。