策略模式属于行为型模式,其中体现了两个基本面向对象设计的基本原则:1,封装;2,接口
1) 许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。
2) 系统中有一些类它们仅行为不同时,可以考虑采用策略模式来进行重构;
3) 系统中存在多重条件选择语句时,可以考虑采用策略模式来重构。
优点:
1 多用组合来实现动态的添加行为,而少用继承(继承使得耦合性增加)。
2 面向抽象(接口)编程,而不要具体实现编程。
3 策略模式是把各种可能变化的东西(算法)进行了封装,这样就实现了变化的部分和保持不变的部分分离,进而减低代码的耦合性。
缺点:客户端必须知道所有的策略类,并自行决定使用哪一个策略类,所以必须对每一个算法了解
dao类:
public userInfo findUserName(String name)
{
userInfo userInfo=null;
try
{
String sql = "select * from userinfo where uname=?";
userInfo=(userInfo)super.get(sql, new Object[]{name},new Mapper()
{
@Override
public Object mappingObject(ResultSet rs)
{
try
{
if(rs.next()){
userInfo user = new userInfo();
user.setUname(rs.getString("uname"));
user.setUpass(rs.getString("upass"));
return user;
}
} catch (SQLException ex)
{
// TODO Auto-generated catch block
ex.printStackTrace();
return null;
}
return null;
}
});
return userInfo;
} catch (Exception e)
{
e.printStackTrace();
return null;
}
}
mapper接口:
public interface Mapper
{
public Object mappingObject(ResultSet rs);
}
模板方法: