策略模式之竞猜项目开奖规则

不问归期 提交于 2020-03-12 19:17:27

什么是策略模式

策略模式是对算法的包装,把使用算法的责任和算法本身分隔开,委派给不同的对象管理。策略模式通常把一系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。

先直接上代码吧:

//竞猜揭晓抽象类(应该有平手、有人竞猜成功、无人竞猜成功三种情况;所以对应的就是三种策略的算法)
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");
        }
    }

一个系统有许多类,而区分它们的只是他们直接的行为时 , 将这些算法封装成一个一个的类,任意的替换避免使用多重条件判断(如果不用策略模式我们可能会使用多重条件语句,不利于维护)扩展性良好,增加一个策略只需实现接口即可 ;但缺点是 策略类数量会增多,每个策略都是一个类,复用的可能性很小

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!