strategy设计模式
有多种不同算法来实现同一个任务,使client根据需要动态切换算法,而不是写死在代码里
类结构
- 一个具体类(Context,环境类,上下文类)
- 一个抽象策略接口
- 多个具体策略类
具体类中,存在需要动态切换算法的方法
采用Dependency的方式通过方法传参建立临时的delegation关系
具体类
// Context.java
public class Context {
public void doSomething(Strategy strategy) {
strategy.algorithm();
}
}
抽象策略接口
// Strategy.java
public interface Strategy {
void algorithm();
}
具体策略类1
// ConcreteStrategy1.java
public class ConcreteStrategy1 implements Strategy {
@override
public void algorithm() {
System.out.pirntln("do something with strategy1");
}
}
具体策略类2
// ConcreteStrategy2.java
public class ConcreteStrategy2 implements Strategy {
@override
public void algorithm() {
System.out.println("do something with strategy2");
}
}
客户端
// Client.java
public static void main(String[] args) {
Context context = new Context();
Strategy strategy1 = new ConcreteStrategy1();
Strategy strategy2 = new ConcreteStrategy2();
context.doSomething(strategy1);
context.doSomething(strategy2);
}
// in terminal
// do something with strategy1
// do something with strategy2