策略模式:定义的固定的接口并有一系列不同类型的具体实现,能够在程序中动态使用这些具体的实现。
策略模式常与代理模式、工厂模式一起使用,以实现策略之间的灵活切换。
基础类/接口:
package dp;
public abstract class AbstractDao {
public abstract Object getById();
public void saveEntity(){
System.out.println("Save entity main...");
}
}
实现1(hibernate):
package dp;
public class HibernateDao extends AbstractDao {
@Override
public Object getById() {
return new String("Hibernate entity...");
}
}
实现2(ibatits):
package dp;
public class IbatitsDao extends AbstractDao {
@Override
public Object getById() {
return new String("Ibatits entity...");
}
}
与静态代理模式结合,使用context实现对策略的切换:
package dp.stratagem;
import dp.AbstractDao;
/**
* @author alex
*
*/
public class StratagemContext {
private AbstractDao dao;
public StratagemContext(AbstractDao dao){
this.dao = dao;
}
public Object getObject(){
return dao.getById();
}
}
Client中应用策略:
public static void testStratagemContext(){
// StratagemContext context = new StratagemContext(new HibernateDao());
StratagemContext stratagem = new StratagemContext(new IbatitsDao());
System.out.println(stratagem.getObject());
}