1 package 反射; 2 interface Product{ 3 public void produce(); 4 } 5 class socks implements Product{ 6 @Override 7 public void produce() { 8 System.out.println("袜子被生产"); 9 } 10 } 11 /* 12 class shoes implements Product{ 13 @Override 14 public void produce() { 15 System.out.println("鞋子被生产"); 16 } 17 } 18 */ 19 class Factory{ 20 private static Product product; 21 public static Product getInstance(String productName){ 22 if(productName.equals("袜子")) 23 product=new socks(); 24 /*每添加一个产品就得增加getInstance方法的代码,可以利用反射改写 25 if(productName.equals("鞋子")) 26 product=new shoes(); 27 */ 28 return product; 29 } 30 } 31 public class TestFactory { 32 public static void main(String[] args) { 33 Product product=Factory.getInstance("袜子"); 34 product.produce();//袜子被生产 35 /* 36 Product product2=Factory.getInstance("鞋子"); 37 product2.produce();//鞋子被生产 38 */ 39 } 40 }
1 package 反射; 2 interface Product{ 3 public void produce(); 4 } 5 class socks implements Product{ 6 @Override 7 public void produce() { 8 System.out.println("袜子被生产"); 9 } 10 } 11 12 class shoes implements Product{ 13 @Override 14 public void produce() { 15 System.out.println("鞋子被生产"); 16 } 17 } 18 19 class Factory{ 20 private static Product product; 21 public static Product getInstance(String productName) throws ClassNotFoundException, InstantiationException, IllegalAccessException{ 22 Class<?> cls=Class.forName(productName); 23 product=(Product)cls.newInstance(); 24 return product; 25 } 26 } 27 public class TestFactory { 28 public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { 29 Product product=Factory.getInstance("反射.socks"); 30 product.produce();//袜子被生产 31 32 Product product2=Factory.getInstance("反射.shoes"); 33 product2.produce();//鞋子被生产 34 35 } 36 }