一、简单工厂代码
父类Car:
public class Car {
public void CreateCar(){};
}
子类ElectricityCar:
public class ElectricityCar extends Car {
@Override
public void CreateCar() {
System.out.println("生产电车");
}
}
子类OilCar:
public class OilCar extends Car {
@Override
public void CreateCar() {
System.out.println("生产油车");
}
}
工厂类CarFactory:
public class CarFactory {
public static Car createCar(String carType){
Car car = null;
switch (carType){
case "ElectricityCar":
car = new ElectricityCar();
break;
case "OilCar":
car = new OilCar();
break;
}
return car;
}
}
主方法类main:
public class main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要造的车的类型(ElectricityCar/OilCar):");
String type = sc.nextLine();
Car car = null;
car = CarFactory.createCar(type);
car.CreateCar();
}
}
执行结果:
二、简单工厂+反射
父类Car、子类ElectricityCar、子类OilCar同上,不做修改
修改后的工厂类CarFactory:
public class CarFactory {
public Car createCar(String carType) throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {
return (Car) Class.forName("designpatterns.demo."+carType).newInstance();
}
}
修改后的主方法类main:
public static void main(String[] args) throws ClassNotFoundException, IOException, InstantiationException, IllegalAccessException {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要造的车的类型(ElectricityCar/OilCar):");
String type = sc.nextLine();
//根据用户输入信息,创建具体车对象
Car car = new designpatterns.demo.CarFactory().createCar(type);
car.CreateCar();
}
执行结果: