什么是策略模式
策略模式是对算法的包装,把使用算法的责任和算法本身分隔开,委派给不同的对象管理。策略模式通常把一系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。
先直接上代码吧:
//竞猜揭晓抽象类(应该有平手、有人竞猜成功、无人竞猜成功三种情况;所以对应的就是三种策略的算法)
public abstract class GuessOperationAbs {
/**
* 发布竞猜结果:更新用户竞猜信息
*/
public abstract void publishGuessResult(***);
}
/**
* 平局的算法处理
**/
@Service
public class FlatGuess extends GuessOperationAbs {
@Override
public void publishGuessResult() {
}
}
/**
* 有人竞猜成功的算法处理
**/
@Service
public class HadWinGuess extends GuessOperationAbs {
@Override
public void publishGuessResult() {
}
}
/**
* 无人竞猜成功的算法处理
**/
@Service
public class NotWinGuess extends GuessOperationAbs {
@Override
public void publishGuessResult() {
}
}
public class GuessTaskTest{
@Autowired
GuessOperationAbs flatGuess;
@Autowired
GuessOperationAbs hadWinGuess;
@Autowired
GuessOperationAbs notWinGuess;
public void judge(){
if (flatGuess instanceof FlatGuess){
System.out.println("归属flatGuess");
}
if (flatGuess instanceof HadWinnerGuess){
System.out.println("归属HadWinnerGuess");
}
if (flatGuess instanceof NotWinnerGuess){
System.out.println("归属NotWinnerGuess");
}
}
当 一个系统有许多类,而区分它们的只是他们直接的行为时 , 将这些算法封装成一个一个的类,任意的替换 , 避免使用多重条件判断(如果不用策略模式我们可能会使用多重条件语句,不利于维护) , 扩展性良好,增加一个策略只需实现接口即可 ;但缺点是 策略类数量会增多,每个策略都是一个类,复用的可能性很小
来源:oschina
链接:https://my.oschina.net/u/4247262/blog/3192773