package ch3;//产品家族abstractclassCar{private String brand;publicCar(){}publicCar(String brand){this.brand = brand;}public String getBrand(){return brand;}publicvoidsetBrand(String brand){this.brand = brand;}publicabstractvoiddrive();}// 华系车classChineseCarextendsCar{publicChineseCar(){}publicChineseCar(String name){super(name);}@Overridepublicvoiddrive(){
System.out.println(this.getBrand()+"中国风");}}// 美系车classUSACarextendsCar{publicUSACar(){}publicUSACar(String name){super(name);}@Overridepublicvoiddrive(){
System.out.println(this.getBrand()+"美系风");}}//简单工厂模式publicclassFactorys{publicstaticfinalint CHINESE =1;publicstaticfinalint USA =2;// 普通工厂方法publicstatic Car create(int type ){
Car car = null;if( type==Factorys.CHINESE ){
car =newChineseCar("");}if( type==Factorys.USA){
car =newUSACar("");}return car;}// 反射实现工厂方法: 执行前不依赖 类型,执行时才需要类型 ,需要保证 依赖的类需要无参构造器publicstatic Car create(String className)throws Exception {//获得类对象
Class xx= Class.forName(className);
Car car =(Car) xx.newInstance();return car;}publicstaticvoidmain(String[] args)throws Exception {//测试1
Car car = Factorys.create(Factorys.CHINESE);
car.drive();//测试2
Car car2 =Factorys.create("ch3.ChineseCar");
car2.drive();}}