1 反射技术

反射技术大量用于Java设计模式和框架技术,最常见的设计模式就是工厂模式(Factory)和单例模式(Singleton)。

用接口来沟通不同程序的开发进度,不必等上游程序写好代码之后,再注入后面流程的程序员。且在实现上,可以用配置文件灵活变更,而不用重编译整个项目

interface InterfaceTest {
 //基于接口规范
  public void getName();
}
class Test1 implements InterfaceTest {
 //不同程序员可以实现不同的重写功能
  public void getName() {
    System.out.println("test1");
  }
}
class Test2 implements InterfaceTest {
  public void getName() {
    System.out.println("test2");
  }
}

Factory类如下所示

import java.io.FileInputStream;
import java.util.Properties;

class Factory {
  private static Properties pro = new Properties();
  static {
    try {
   //通过配置文件来实现载入不同的类,实现不同的功能
      pro.load(new FileInputStream("test.property"));
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 //保证单例 
  private static Factory factory = new Factory();
  private Factory() {}
  public static Factory getFactory() {
    return factory;
  }

  public InterfaceTest getInstance() {
    InterfaceTest interfaceTest = null;
    try {
    //反映功能可灵活实例化不同的类,作框架是很灵活自由的啦
      String classInfo = pro.getProperty("test");
      Class c = Class.forName(classInfo);
      Object obj = c.newInstance();
      interfaceTest = (InterfaceTest)obj;
    } catch (Exception e) {
      e.printStackTrace();
    }
    return interfaceTest;
  }
}

配置文件如下所示

test=Test1

测试文件如下所示

public class FactoryTest {
  public static void main(String[] args) {
    System.out.println("~~~~~~~~~~~~~~~~");
    Factory factory = Factory.getFactory();
    System.out.println("!!!!!!!!!!!!!!!!!");
    InterfaceTest inter = factory.getInstance();
    System.out.println("@@@@@@@@@@@@@@@@@@");
    inter.getName();
    System.out.println("##################");
  }
}

2 可能存在的问题

这里采用了反射机制,每次Factory返回的都是新的实例,如果你的Factory操作非常频繁,就会返回很多的实例,而这个时候,操作对象类的单例模式就会没有意义,因为实例已经产生了。

Class c = Class.forName(classInfo);
Object obj = c.newInstance();

登录发表评论 注册

反馈意见