工厂设计模式验证了解

时间:2018-10-07 01:15:08

标签: java design-patterns

我想验证我的理解是否正确。

假设我有Car类和SuperCar和ClassicCar两个子类。

如果我创建了在CarFactory中创建这两个子类的方法,并且按如下方式调用它们-SuperCar的CarFactory.make(“ super”)和ClassicCar的CarFactory.make(“ classic”),则我使用的是简单工厂吧?

如果我想使用工厂方法,则需要使CarFactory成为具有make()方法的抽象/接口。然后,我应该使用其他工厂,例如DefaultCarFactory来创建默认汽车并覆盖make()方法,而ModifyCarFactory来创建修改后的汽车,该汽车也将覆盖make()方法,在这种情况下,这两个方法仍返回基于我给出的参数是“经典”还是“超级”

我的理解正确吗?

1 个答案:

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

}