一、创建一个接口:
/**
* 发型接口
* @author Administrator
*
*/
public interface HairInterface {
//实现了发型
public void darw();
}
二、type.properties:
left=com.ltj.sunny.LeftHair
right=com.ltj.sunny.RightHair
in=com.ltj.sunny.InHair
三、properties文件读取工具
package com.ltj.sunny;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
/**
* properties文件读取工具
* @author Administrator
*
*/
public class PropertiesReader {
public Map<String,String> getProperties(){
Properties props=new Properties();
Map<String,String> map=new HashMap<String, String>();
InputStream in=getClass().getResourceAsStream("type.properties");
try {
props.load(in);
Enumeration en=props.propertyNames();
while(en.hasMoreElements()){
String key=(String) en.nextElement();
String property=props.getProperty(key);
map.put(key, property);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return map;
}
}
package com.ltj.sunny;
import java.util.Map;
/**
* 发型工厂
* @author Administrator
*
*/
public class HairFactory {
/**
* 根据类型来创建对象
* @param key
* @return
*/
public HairInterface getHair(String key){
if("left".equals(key)){
return new LeftHair();
}
else if("right".equals(key)){
return new RightHair();
}else
return null;
}
/**
* 根据类的名称来生产对象
* @param className
* @return
*/
public HairInterface getHairByClass(String className){
try {
HairInterface hair=(HairInterface) Class.forName(className).newInstance();
return hair;
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
<pre name="code" class="java"><span style="white-space:pre"> </span>/**
* 根据类的名称来生产对象
* @param className
* @return
*/
public HairInterface getHairByClassKey(String key){try {Map<String,String> map=new PropertiesReader().getProperties();HairInterface hair=(HairInterface) Class.forName(map.get(key)).newInstance();return hair;} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return null;}}
五、创建工厂实例:
第一个工厂实例
package com.ltj.sunny;
/**
* 左偏分发型
* @author Administrator
*
*/
public class LeftHair implements HairInterface{
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>public void darw() {
<span style="white-space:pre"> </span>System.out.println("=======================左偏分发型=======================");
<span style="white-space:pre"> </span>}
}
package com.ltj.sunny;
/**
* 左偏分发型
* @author Administrator
*
*/
public class RightHair implements HairInterface{
@Override
public void darw() {
System.out.println("=======================右偏分发型=======================");
}
}
六、测试类:
package com.ltj.sunny;
/**
* 模拟客户端的实现
* @author Administrator
*
*/
public class SunnyTest {
public static void main(String[] args) {
HairFactory factory=new HairFactory();
HairInterface hair=factory.getHairByClassKey("in");
hair.darw();
}
}