應用設計模式之策略模式(Reflection)

前兩篇文章介紹了結合靜態代理簡單工廠對策略進行應用,這裏介紹使用反射方式應用策略模式。

定義反射策略類:

/**

 * @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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章