定义一个理头发的接口
package factory;
/**
* 理头发接口
* @author Administrator
*
*/
public interface HairInterface {
//实现了发型接口
public void draw();
}
中分的发型
package factory.ipml;
import factory.HairInterface;
public class InHiar implements HairInterface {
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("中分");
}
}
右偏分的发型
package factory.ipml;
import factory.HairInterface;
public class RigeHiar implements HairInterface {
/**
* 做了个 右偏分发型
*/
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("又偏分发型");
}
}
左偏分的发型
package factory.ipml;
import factory.HairInterface;
public class LeftHair implements HairInterface {
/**
* 做了一个左偏分的发型哈
*/
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("左偏分发型");
}
}
发型工厂
package factory;
import java.util.Map;
import factory.ipml.PropertisResader;
/**
* 发型工厂
* @author Administrator
*
*/
public class Hiarfactory {
public HairInterface geiHiar(HairInterface hiar){
return hiar;
};
//通过反射
public HairInterface getHairByClass(String className){
try {
HairInterface hari=(HairInterface)Class.forName(className).newInstance();
return hari;
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//properties文件
public HairInterface getHairByClassKey(String key){
try {
Map<String,String>map=new PropertisResader().getProperties();
HairInterface hari=(HairInterface)Class.forName(map.get(key)).newInstance();
return hari;
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
读取properties文件类
package factory.ipml;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
public class PropertisResader {
public Map<String, String>getProperties(){
Properties ps=new Properties();
Map<String, String> map=new HashMap<String, String>();
try {
//读取文件
//文件名前不加“/”,则表示从当前类所在的包下查找该资源。
InputStream in =getClass().getResourceAsStream("/factory/type.properties");
System.out.println(getClass().getResourceAsStream(""));
ps.load(in);
Enumeration en=ps.propertyNames();
while(en.hasMoreElements()){
String key=(String)en.nextElement();
String property=ps.getProperty(key);
map.put(key, property);
System.out.println("key:"+key+" value:"+property);
}
return map;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return null;
}
}
完成最后测试工厂类
package factory.test;
import factory.HairInterface;
import factory.Hiarfactory;
import factory.ipml.LeftHair;
/**
* 测试方法
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) {
/*HairInterface left=new LeftHair();
left.draw();*/
Hiarfactory faoce=new Hiarfactory();
/*HairInterface f= faoce.geiHiar(new LeftHair());
f.draw();*/
//通过反射实现
/*HairInterface left=faoce.getHairByClass("factory.ipml.LeftHair");
left.draw();*/
try {
HairInterface left=faoce.getHairByClassKey("in");
left.draw();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}