一、概述
战略形式(Strategy Pattern)定义了一组战略,分别在不同类中封装起来,每种战略都能够依据当时场景相互替换,从而使战略的改变能够独立于操作者。比如咱们要下班回家,会依据距离的不同来挑选不同的出行办法(共享单车、坐公交、滴滴打车等等),这些出行办法即不同的战略。
在战略形式中,咱们创立表明各种战略的目标和一个行为跟着战略目标改变而改变的 context 目标。战略目标改变 context 目标的履行算法。
战略形式的3种人物
- 笼统(Strategy)人物:战略类,通常是一个接口或许笼统类。
- 具体战略(ConcreteStrategy)人物:完成了战略类中的战略办法,封装相关的算法和行为。
- 环境(Context)人物:持有一个战略类的引用,最终给客户端调用。

二、优缺点
长处:1、算法能够自在切换。 2、避免运用多重条件判断。 3、扩展性杰出。
缺点:1、战略类会增多。 2、一切战略类都需要对外暴露。
三、完成办法
以乘坐不同的交通工具(自行车、公交车、出租车多种战略)回家为例,简略完成战略形式。

战略笼统类
public interface Strategy {
void goHome();
}
具体战略类
public class TaxiStrategy implements Strategy{
@Override
public void goHome() {
System.out.println("公司报销,乘坐出租车回家");
}
}
public class BusStrategy implements Strategy{
@Override
public void goHome() {
System.out.println("省钱省力,坐公交回家");
}
}
public class BicycleStrategy implements Strategy{
@Override
public void goHome() {
System.out.println("为了省钱,骑自行车回家");
}
}
环境类(战略挑选器)
public class Context {
private Strategy strategy;
public Context(Strategy strategy){
this.strategy = strategy;
}
public void go(){
strategy.goHome();
}
}
客户端
public class Client {
public static void main(String[] args) {
Context context = new Context(new BicycleStrategy());
context.go();
Context context1 = new Context(new BusStrategy());
context1.go();
Context context2 = new Context(new TaxiStrategy());
context2.go();
}
}
输出成果
为了省钱,骑自行车回家 省钱省力,坐公交回家 公司报销,乘坐出租车回家
四、常见使用场景
(1)假如在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么运用战略形式能够动态地让一个目标在许多行为中挑选一种行为。
(2)一个系统需要动态地在几种算法中挑选一种。
(3)假如一个目标有很多的行为,假如不必恰当的形式,这些行为就只好运用多重的条件挑选句子来完成。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。