疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java设计模式静态工厂


 

   

  静态工厂方法是一种将类的运用者和产生着隔离的设计模式,它是一种创造型模式,但是它不属于23种基本设计模式中的一种,它是理解抽象工厂的基础

  1.属性配置文件

  Java程序通常处理的配置文件有两种类型①XML格式的配置文件、②属性配置文件(.properties文件)

  属性配置文件是一种简单的、易解析的文件格式。该.properties文件是一个文本文件,仅包含两种语法。

  前面加有#号的行是注释;

  以“键=值”的方式定义一个属性的配置信息。键值前后的空格在解析时候会被忽略;键不可以换行,值换行用“”表示。

  默认的属性配置文件为默认包目录下的my.properties,其内容为:

  #本属性配置文件代表从数据库、属性配置文件或XML文件中获得字符串的各种技术。

  #本文件用于多个程序,使用前要检查本文件是否进行了必要的修改。

  #注意:键必须映射类全名。

  1=Test1.Cat1

  2=Test1.Cat2

  3=HelperMethod.Method1

  2. tool.God

  使用JDK中的java.util.Properties类能够方便地处理属性配置文件。

  God类getValue(String path,String key)方法从path指定的属性配置文件中,读取key的值,它是God类的核心,但是对于学习设计模式而言无关紧要。

  重载的create ()方法是静态工厂。create (String path,String key)将调用getValue()方法,按照其返回的字符串,通过反射机制创建对象。其他重载的create则是简化了参数的方法。如create ()将从my.properties文件中读取typeName键映射的类全名,并创建其对象。

  注意:create方法的返回值类型为Object,使用时客户代码需要自行将其向下造型为适当的类型。

  

God类如下:

 

  package tool;

  import java.io.*;

  import java.util.Properties;

  public class God{

  public static String getValue(String path,String key){

  Properties props = new Properties();

  try {

  InputStream is = God.class.getClassLoader().getResourceAsStream(path) ;

  try{

  InputStreamReader isr = new InputStreamReader(is,"UTF-8");

  props.load(isr);//从流中加载properties文件信息

  }catch (java.io.FileNotFoundException e) { e.printStackTrace();}

  }catch (java.io.IOException e) { e.printStackTrace();

  }

  return props.getProperty(key);

  }

  public static Object create(){

  return create("my.properties","typeName");

  }

  public static Object create(String key){

  return create("my.properties",key);

  }

  public static Object create(String path,String key){

  String typeName = getValue(path,key);

  Object obj=null;

  if(typeName!=null){

  try {

  obj = Class.forName(typeName).newInstance();

  } catch (InstantiationException e) { e.printStackTrace();

  } catch (IllegalAccessException e) { e.printStackTrace();

  } catch (ClassNotFoundException e) { e.printStackTrace();

  }

  }

  return obj;

  }

  }

  分类: Java设计模式