文章目录
介绍
描述
策略模式设计模式属于行为型模式,定义了一系列的算法,并将每一个算法封装起来,使每个算法可以相互替代,使算法本身和使用算法的客户端分割开来,相互独立。
特点
-
优点:取代大量的if-else操作,可以自由切换,拓展性好。
-
缺点:每添加一个策略,就要增加一个类导致策略类过多。
实现原理
IStrategy(策略接口角色):用来指定具体的策略算法,策略上下文角色 ConcreteStrategy 实现具体的策略算法。
ConcreteStrategy(具体策略实现角色):具体的策略实现,即具体的算法实现。
StrategyContext (策略上下文角色):负责和具体的策略实现交互内部持有一个真正的策略实现对象,策略上下文还可以让具体的策略实现从其中获取相关数据,回调策略上下文对象的方法。
适用
-
一个系统中如果有许多类,他们的行为各不相同的场景。
-
一个系统需要在几种算法中选择一种。
策略模式
实现
第一步:定义策略接口。
public interface IStrategy {
public void use();
}
第二步:具体策略实现角色。
// 策略 1
public class Bicycle implements IStrategy {
@Override
public void use() {
System.out.println("选用 自行车...出行");
}
}
// 策略 2
public class Car implements IStrategy {
@Override
public void use() {
System.out.println("选用 汽车...出行");
}
}
第三步:策略上下文角色Context。
public class Context {
private IStrategy strategy;
public Context(IStrategy strategy) {
this.strategy = strategy;
}
public void setStrategy(IStrategy strategy) {
this.strategy = strategy;
}
public void executeStrategy(){
strategy.use();
}
}
第四步:测试。
public class Test {
public static void main(String[] args) {
Context context = new Context(new Car());
context.executeStrategy();
context.setStrategy(new Bicycle());
context.executeStrategy();
/*
选用 汽车...出行
选用 自行车...出行
*/
}
}