如何编写工具类

来源:互联网 发布:淘宝其他物流是什么 编辑:程序博客网 时间:2024/05/17 05:01

上篇的反射创建的对象工厂也是一个工具类

编写工具类俩种方式:

一:

 1.工具方法都设为非static方法

 2.将工具类设计为单列模式

 3.注意这种方式需要获取工具类对象(实例化)才能调用方法

二:

 1.工具方法设计为static方法

 2.工具 类所有构造方法都设计为private修饰

 3.工具类本身以abstract修饰(目的就是只能用类调用方法,不能实例化)

 

/***************************对象调用方式****************************/


public class BeanFactory {
    
     public BeanFactory(){
    
     }
         public <T>T  getBeanFactory(String name,Class<T> checkType){

             Object obj;
        try {
        Class<T> claz = (Class<T>) Class.forName(name);
        obj = claz.newInstance();
            if(!checkType.isInstance(obj)){
                 throw new IllegalArgumentException("参数类型不匹配");
                 }else{
                     return (T)obj;
                 }
        } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
     
         
         return null;
         }         
}

/**************************static方式*************************/

abstract public class BeanFactory {
    
     private BeanFactory(){
    
     }
         public static <T>T  getBeanFactory(String name,Class<T> checkType){

             Object obj;
        try {
        Class<T> claz = (Class<T>) Class.forName(name);
        obj = claz.newInstance();
            if(!checkType.isInstance(obj)){
                 throw new IllegalArgumentException("参数类型不匹配");
                 }else{
                     return (T)obj;
                 }
        } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
     
         
         return null;
         }         
}


/*************************** 枚举方式*********************************/

  枚举调用方式:

  Date date2 = BeanFactory.INSTANCE.getBeanFactory("java.util.Date",Date.class);

package invokeBeanFactorty;

/**
 * 利用java反射创建一个对象工厂  创建对象工厂模式 涉及到设计模式中的单列模式
 * 最好用枚举的方式
 * @author Administrator
 *
 */
public enum BeanFactory {
    INSTANCE;
         public <T>T  getBeanFactory(String name,Class<T> checkType){

             Object obj;
        try {
        Class<T> claz = (Class<T>) Class.forName(name);
        obj = claz.newInstance();
            if(!checkType.isInstance(obj)){
                 throw new IllegalArgumentException("参数类型不匹配");
                 }else{
                     return (T)obj;
                 }
        } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
     
         
         return null;
         }         
}

0 0
原创粉丝点击