14.策略模式
策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。
策略模式把这些算法,都抽取出来,组成一个一个的类,可以任意的替换,大大降低了代码的耦合度。
实现原理:将相同行为抽成一个接口(行为接口),定义方法,将具体实现定义实现类(算法类),在调用算法的方法中,用行为接口作为参数,调用方法.在实参传具体接口实现类(算法类),从而不同实现类,实现不同效果.
优点
- 算法多样性,且具备自由切换功能;
- 有效避免多重条件判断,增强了封装性,简化了操作,降低出错概率;
- 扩展性良好,策略类遵顼里氏替换原则,可以很方便地进行策略扩展;
缺点
- 策略类数量增多,且所有策略类都必须对外暴露,以便客户端能进行选择;
使用场景 - 针对同一类型问题,有多种处理方式,每一种都能独立解决问题;
- 算法需要自由切换的场景;
- 需要屏蔽算法规则的场景;
1、策略接口
public interface IStrategy {
/**
*现在的运行状态
*/
void sportStatus();
}
2、若干策略实现类
红灯:
public class RedLight implements IStrategy {
@Override
public void sportStatus() {
System.out.println("红灯停");
}
}
黄灯:
public class YellowLight implements IStrategy {
@Override
public void sportStatus() {
System.out.println("黄灯等待");
}
}
绿灯:
public class GreenLight implements IStrategy {
@Override
public void sportStatus() {
System.out.println("绿灯行");
}
}
3、策略上下文对象
@AllArgsConstructor
@NoArgsConstructor
@Data
public class StrategyContext {
private IStrategy iStrategy;
public void contextMethod(){
iStrategy.sportStatus();
}
}
4、测试类
public class StrategyTest {
public static void main(String[] args) {
IStrategy yellowLight = new YellowLight();
StrategyContext strategyContext = new StrategyContext(yellowLight);
strategyContext.contextMethod();
}
}