反射与工厂设计模式

Posted 勇往直前

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射与工厂设计模式相关的知识,希望对你有一定的参考价值。

/*
   通过反射技术改进的工厂,不再使用new关键字来实例化对象了
*/
package com.reflect.factory.model;

interface IFruit {
    public abstract void eat();
}
class Apple implements IFruit{
    @Override
    public void eat() {
       System.out.println("【Apple】吃苹果");
    }
}

class Factory {
    private Factory(){}
    public static  IFruit getInstance(String className){        
        IFruit fruit = null; 
        try {
                         //获取到Class类对象
            Class<?> clazz = Class.forName(className);
                        //通过Class对象实例化对象,但不再用new关键字
            fruit=(IFruit)clazz.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        } 
        return fruit;
    }    
}
public class TestDemo {
    public static void main(String[] args) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException {
          IFruit fruit = Factory.getInstance("com.reflect.factory.model.Apple");
          fruit.eat();
    }
}
/*
   上面这个工厂类存在一个缺陷,目前只能产生IFruit的实例化对象,
   如果需要生成其它类的实例化对象,就需要重新创建一个工厂

   如何解决这个问题呢?
      我们可以使用泛型来解决这个缺陷:
      改进版工厂类如下:
*/
class Factory {
    private Factory(){}
    public static <T> T getInstance(String className){
        T obj = null; 
        try {
            Class<?> clazz = Class.forName(className);
            obj=(T)clazz.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        } 
        return obj;
    }    
}

 

以上是关于反射与工厂设计模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之工厂方法配置文件与反射

工厂模式——抽象工厂模式(+反射)

Java反射机制用反射改进简单工厂模式设计

抽象工厂模式(JAVA反射)

一抽象工厂模式&&简单工厂+反射改进抽象工厂

深入理解设计模式-策略模式(结合简单工厂反射Spring详细讲解)