JAVA反射之工厂模式和invoke

工厂设计模式:

开发中有一个非常重要的原则“开闭原则”,对拓展开放、对修改关闭。

工厂模式主要负责对象创建的问题

可通过反射进行工厂模式的设计,完成动态的对象创建。

创建对象的两种方式(以Student为例):

Student  s  =  new Student();

Class c = Student.class;
Object o = c.newInstance();
Student s2 = (Student)o;

//通过输入流获取全限定名
FileReader fr = new FileReader("Files\\properties.txt");
BufferedReader br = new BufferedReader(fr);
String str = br.readLine();
Object oo = createObject(str);

//创建对象!
//工厂:创建对象工厂
public static Object createObject(String str){
       try {
            Class c = Class.forName(str);
            Object o = c.newInstance();
            return o;//通过一系列的转换返回一个Object对象
       } catch (Exception e) {
          e.printStackTrace();
       }
       return null;
}

 

invoke:

一:通过Class类对象去调用对象的方法:

//反射 类的对象
Object o = createObject("com.qf.day35.t1.reflects.Student");
//类对象
Class c =o.getClass();
//name->方法名 ,parameterTypes ->参数列表类型
Method m = c.getMethod("study",null);
//通过invoke方法,执行某个实例方法,参数:Object->所需对象,args->调用的方法所需的实参
m.invoke(o, null);

二:通过方法输入对象,形参类型和实参:

Object o = TestInvoke.createObject("com.qf.day35.t0.invoke.Student");//获取对象
invokeAny(o,"exam",new Class[]{int.class,double.class,String.class},1,90,"赵公民");
invokeAny(o, "study",null,null);//调用invokeAny()方法执行其中的方法

//通用编程(调用任何一个方法)
public static void invokeAny(Object obj,String methodName,Class[] types,Object... args) throws Exception {
//使用反射技术执行任何方法
//类对象
Class c = obj.getClass();
//获得方法的对象Method
Method m = c.getDeclaredMethod(methodName, types);
//执行方法
m.invoke(obj, args);
}

发布了41 篇原创文章 · 获赞 111 · 访问量 8595

猜你喜欢

转载自blog.csdn.net/S9264L/article/details/105001129