TestClassFactory

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(
"三号工人在工作!");
    }

}

 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值