前兩篇文章介紹了結合靜態代理和簡單工廠對策略進行應用,這裏介紹使用反射方式應用策略模式。
定義反射策略類:
/**
* @author alex
*
*/
public class StratagemReflection {
private AbstractDao dao;
public StratagemReflection(String className) throws Exception{
try {
this.dao = (AbstractDao)Class.forName(className).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public Object getObject(){
return dao.getById();
}
}
Client應用策略:
public static void testStratagemRef(){
try {
// StratagemReflection stratagem = new StratagemReflection("dp.HibernateDao");
// StratagemReflection stratagem = new StratagemReflection("dp.IbatitsDao");
StratagemReflection stratagem = new StratagemReflection("dp.stratagem.JdbcDao");
System.out.println(stratagem.getObject());
} catch (Exception e) {
e.printStackTrace();
}
}
一般情況下會使用properties文件或xml文件,配置具體的策略實現類,通過對配置文件的修改實現策略之間的切換,而不需要對具體的代碼進行修改,如spring中PropertyPlaceholderConfigurer。