要求:有AserviceImp,BserviceImp,CserviceImp三个类,其对应接口分别为Aservice,Bservice,Cservice,每个类中均有test方法,分别输出Atest,Btest,Ctest。
知识点:工厂模式,配置文件
小技巧:类名右键单击copy qualified name,复制文件的全类名
Aservice
package cn.kgc.tangcco.reflect1.service;
public interface Aservice {
void test();
}
Bservice
ackage cn.kgc.tangcco.reflect1.service;
public interface Bservice {
void test();
}
Cservice
package cn.kgc.tangcco.reflect1.service;
public interface Cservice {
void test();
}
AserviceImp
package cn.kgc.tangcco.reflect1.service;
public class AserviceImp implements Aservice {
@Override
public void test() {
System.out.println("Atest");
}
}
BserviceImp
package cn.kgc.tangcco.reflect1.service;
public class BserviceImp implements Bservice {
@Override
public void test() {
System.out.println("Btest");
}
}
CserviceImp
package cn.kgc.tangcco.reflect1.service;
public class CserviceImp implements Cservice {
@Override
public void test() {
System.out.println("Ctest");
}
}
Constant
package cn.kgc.tangcco.reflect1.util;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Properties;
public class Constant {
//设置静态常量,方便调用
public static final String AS="as";
public static final String BS="bs";
public static final String CS="cs";
//创建properties对象
private static Properties properties =new Properties();
//把"src/cn/kgc/tangcco/reflect1/pro.properties"目录下的文件加载进properties
static{
try {
InputStream in=new FileInputStream("src/cn/kgc/tangcco/reflect1/pro.properties");
properties.load(in);
} catch (Exception e) {
e.printStackTrace();
}
}
//根据key值获取配置文件中定义的数据
public static String getUrl(String key){
return properties.getProperty(key);
}
}
ObjectFactory
package cn.kgc.tangcco.reflect1.util;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.junit.Test;
import cn.kgc.tangcco.reflect1.service.Aservice;
import cn.kgc.tangcco.reflect1.service.Bservice;
import cn.kgc.tangcco.reflect1.service.Cservice;
public class ObjectFactory {
//设置map集合
private static Map<String, Object> map=new ConcurrentHashMap<String, Object>();
//根据key值返回对象
public static <E>E getInstance(String key){
E obj=null;
//如果对象已经创建(用(map.containsKey(key)判断),直接调用,否则重新生成
if (map.containsKey(key)) {
obj=(E)map.get(key);
}else{
try {
Class clz=Class.forName(key);
obj=(E)clz.newInstance();
map.put(key, obj);
} catch (Exception e) {
e.printStackTrace();
}
}
return obj;
}
//测试文件
@Test
public void test(){
Aservice aservice=getInstance(Constant.getUrl(Constant.AS));
aservice.test();
Bservice bservice=getInstance(Constant.getUrl(Constant.BS));
bservice.test();
Cservice cservice=getInstance(Constant.getUrl(Constant.CS));
cservice.test();
}
}
pro.properties
as=cn.kgc.tangcco.reflect1.service.AserviceImp
bs=cn.kgc.tangcco.reflect1.service.BserviceImp
cs=cn.kgc.tangcco.reflect1.service.CserviceImp