我想验证我的理解是否正确。
假设我有Car类和SuperCar和ClassicCar两个子类。
如果我创建了在CarFactory中创建这两个子类的方法,并且按如下方式调用它们-SuperCar的CarFactory.make(“ super”)和ClassicCar的CarFactory.make(“ classic”),则我使用的是简单工厂吧?
如果我想使用工厂方法,则需要使CarFactory成为具有make()方法的抽象/接口。然后,我应该使用其他工厂,例如DefaultCarFactory来创建默认汽车并覆盖make()方法,而ModifyCarFactory来创建修改后的汽车,该汽车也将覆盖make()方法,在这种情况下,这两个方法仍返回基于我给出的参数是“经典”还是“超级”
我的理解正确吗?
答案 0 :(得分:0)
您不应依赖经典和 super 区分符。
看看下面的代码片段。
您的汽车层次结构:
public class Car {...}
public class ClassicCar extends Car() {...}
public class SuperCar extends Car() {...}
出厂定义:
public interface CarFactory {
// it is imperative the return type here is `Car`
Car getInstance();
}
工厂实现:
public ClassicCarFactory implements CarFactory {
@Override
public Car getInstance() {
return new ClassicCar();
}
}
public SuperCarFactory implements CarFactory {
@Override
public Car getInstance() {
return new SuperCar();
}
}
您的客户代码:
public class CarClient {
private CarFactory factory;
// inject a ClassicCarFactory or a SuperCarFactory via constructor
public CarCient(CarFactory factory){
this.factory = factory;
}
public void doSomethingWithCar() {
// get either a ClassicCar or a SuperCar based on the concrete factory type
Car car = factory.getInstance();
...
}
}