このリンクからファクトリ パターンの例を取り上げました。
ただし、コードを自分の IDE にコピーすると、コンストラクターにオーバーライド可能なメソッド呼び出しがあるという警告が表示されます。私はこれが何を意味するかを理解しています.factoryパターンがこの問題を解決するはずだと思っただけですか? チュートリアルに欠陥はありますか?私は何か違うことをすべきですか?
貼り付けるコードの量を節約するために、車種の 1 つだけを含めました。
クラスCar
:
package FactoryPattern;
public abstract class Car {
public Car(CarType model){
this.model = model;
arrangeParts();
}
private void arrangeParts(){
//Do one time processing herer
}
//Do subclass level processing in this method
protected abstract void construct();
private CarType model = null;
public CarType getModel(){
return model;
}
public void setModel (CarType model){
this.model = model;
}
}
クラスCarFactory
:
package FactoryPattern;
public class CarFactory {
public static Car buildCar(CarType model){
Car car = null;
switch (model) {
case SMALL:
car = new SmallCar();
break;
case SEDAN:
car = new SedanCar();
break;
case LUXURY:
car = new LuxuryCar();
break;
default:
//throw an exception
break;
}
return car;
}
}
クラスFactoryPattern
:
package FactoryPattern;
public enum CarType {
SMALL, SEDAN, LUXURY
}
package FactoryPattern;
public class LuxuryCar extends Car {
LuxuryCar(){
super(CarType.LUXURY);
construct();
}
@Override
protected void construct(){
System.out.println("Building Luxury Car");
}
}
クラスCarFactoryTest
:
package FactoryPattern;
public class CarFactoryTest {
public static void main(String[] args) {
CarFactory.buildCar(CarType.SMALL);
CarFactory.buildCar(CarType.SEDAN);
CarFactory.buildCar(CarType.LUXURY);
}
}