策略模式
一 概述
什么是策略模式
策略模式:定义一系列算法(行为),把他们一个一个封装起来,并且使他们可以相互替换,该模式使得算法(行为)可独立与使用它的客户而变化。
为什么使用策略模式
具体例子:比如,一个人参加比赛,这场比赛有三个评委,每个评委会对选手的表现打分,然后计算平均分。这时,我们可以写一个计算平均分的方法,但这是建立在三个评委的计算方式一致的情况下,但是每个评委都不相同该怎么办呢,这时,我们就可以将这个计算规则抽象为一个接口,具体的实现交给他的实现类来完成,这样就可以很好的完成这个任务。有的小伙伴可能认为继承重写方法也可以完成,下面会对比这两种实现方式。
二 模式的结构与使用
角色
- 策略:策略是一个接口,该接口定义若干算法(行为)标识,及定义了若干的抽象方法。
- 具体策略:实现策略接口的类。具体策略实现策略接口所定义的抽象方法,即给出算法(行为)标识的具体实现。
- 上下文:依赖于策略接口的类,包含有策略接口的声明,上下文中有一个方法来调用具体的策略。
具体实现
- 策略
/*
* 策略的抽象接口,规定具体策略要实现的方法
*/
public interface ComputableStrategy {
public abstract double computerScore(double