package com.jasonhuang.test; import org.apache.log4j.Level; import org.apache.log4j.Logger; /** */ /** * 测试实现反射机制的工厂类,通过反射机制实例化指定的接口实现类,并调用接口方法。 * * @author huangxm */ public class TestClassFactory ... { /** *//** * Log4j日志 */ private static Logger logger = Logger.getLogger(TestClassFactory.class); /** *//** * 根据类名生成接口ITestWorker的实现类 * * @param name * 实现类类名 * @return * @throws ClassNotFoundException * @throws IllegalAccessException * @throws InstantiationException */ private ITestWorker create(String name) ...{ ITestWorker worker = null; Class clazz; try ...{ clazz = Class.forName(name); worker = (ITestWorker) clazz.newInstance(); } catch (ClassNotFoundException e) ...{ logger.error("类不存在!"); } catch (ClassCastException e) ...{ logger.error("非接口实现类!"); } catch (InstantiationException e) ...{ logger.error("无法实例化!"); } catch (IllegalAccessException e) ...{ logger.error("无权访问类构造器!"); } return worker; } /** *//** * @param args */ public static void main(String[] args) ...{ // 设置日志记录等级 logger.setLevel(Level.INFO); // 工厂类 TestClassFactory factory = new TestClassFactory(); // 接口 ITestWorker worker = null; // TestWorker1可运行。 worker = factory.create("com.jasonhuang.test.TestWorker1"); if (worker != null) ...{ worker.work(); } // TestWorker2可运行。 worker = factory.create("com.jasonhuang.test.TestWorker2"); if (worker != null) ...{ worker.work(); } // TestWorker3非接口实现类,无法运行。 worker = factory.create("com.jasonhuang.test.TestWorker3"); if (worker != null) ...{ worker.work(); } // TestWorker4不存在,无法运行。 worker = factory.create("com.jasonhuang.test.TestWorker4"); if (worker != null) ...{ worker.work(); } }} // 接口 interface ITestWorker ... { public void work();} // 实现类一 class TestWorker1 implements ITestWorker ... { /** *//** * Log4j日志 */ private static Logger logger = Logger.getLogger(TestWorker1.class); /**//* * 实现接口方法 * * @see com.jasonhuang.test.ITestWorker#work() */ public void work() ...{ logger.setLevel(Level.INFO); logger.info("一号工人在工作!"); }} // 实现类二 class TestWorker2 implements ITestWorker ... { /** *//** * Log4j日志 */ private static Logger logger = Logger.getLogger(TestWorker2.class); /**//* * 实现接口方法 * * @see com.jasonhuang.test.ITestWorker#work() */ public void work() ...{ logger.setLevel(Level.INFO); logger.info("二号工人在工作!"); }} // 非实现类 class TestWorker3 ... { /** *//** * Log4j日志 */ private static Logger logger = Logger.getLogger(TestWorker3.class); /** *//** * 普通方法 */ public void work() ...{ logger.setLevel(Level.INFO); logger.info("三号工人在工作!"); }}