反射改进简单工厂(含代码)
一、简单工厂代码
父类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(); }
执行结果: