# 23种设计模式-策略模式
# 1.策略模式
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。
# 优缺点
# 优点:
符合开闭原则 避免使用多重条件转移语句,如if...else...语句、switch 语句 使用策略模式可以提高算法的保密性和安全性。
# 缺点:
客户端必须知道所有的策略,并且自行决定使用哪一个策略类。 代码中会产生非常多策略类,增加维护难度。
# 使用场景
# 实现方式
# 抽象策略类(Strategy):
public interface Strategy {
public void operate();
}
# 三个实现类(ConcreteStrategy):
//妙计一:初到吴国
public class BackDoor implements IStrategy {
@Override
public void operate() {
System.out.println("找乔国老帮忙,让吴国太给孙权施加压力,使孙权不能杀刘备");
}
}
//求吴国太开绿灯放行
public class GivenGreenLight implements IStrategy {
@Override
public void operate() {
System.out.println("求吴国太开个绿灯,放行");
}
}
//孙夫人断后,挡住追兵
public class BlackEnemy implements IStrategy {
@Override
public void operate() {
System.out.println("孙夫人断后,挡住追兵");
}
}
# 环境类(Context):
public class Context {
private Strategy strategy;
//构造函数,要你使用哪个妙计
public Context(Strategy strategy){
this.strategy = strategy;
}
public void setStrategy(Strategy strategy){
this.strategy = strategy;
}
public void operate(){
this.strategy.operate();
}
}
# 测试类
public class Zhaoyun {
public static void main(String[] args) {
Context context;
System.out.println("----------刚到吴国使用第一个锦囊---------------");
context = new Context(new BackDoor());
context.operate();
System.out.println("\n");
System.out.println("----------刘备乐不思蜀使用第二个锦囊---------------");
context.setStrategy(new GivenGreenLight());
context.operate();
System.out.println("\n");
System.out.println("----------孙权的追兵来了,使用第三个锦囊---------------");
context.setStrategy(new BlackEnemy());
context.operate();
System.out.println("\n");
}
}
参考博客:https://blog.csdn.net/a745233700/article/details/83661703