【java】工厂模式Factory,利用反射改进

 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 }
此代码含new耦合,有待优化。
 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 }
利用反射改进
原文地址:https://www.cnblogs.com/xiongjiawei/p/6682116.html