2019-02-28——设计模式 策略模式
2019-02-28 本文已影响0人
烟雨乱平生
特点
定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户。在策略模式中它将这些解决问题的方法定义成一个算法群,每一个方法都对应着一个具体的算法,这里的一个算法我就称之为一个策略。虽然策略模式定义了算法,但是它并不提供算法的选择,即什么算法对于什么问题最合适这是策略模式所不关心的,所以对于策略的选择还是要客户端来做。客户必须要清楚的知道每个算法之间的区别和在什么时候什么地方使用什么策略是最合适的,这样就增加客户端的负担。
主要角色
- 抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。
- 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。
- 环境(Context)类:持有一个策略类的引用,最终给客户端调用。
实现
public interface Strategy<T> {
T calculate(T t1,T t2);
}
public class StrategyA implements Strategy<String> {
@Override
public String calculate(String t1, String t2) {
return t1+t2;
}
}
public class StrategyB implements Strategy<Integer> {
@Override
public Integer calculate(Integer t1, Integer t2) {
return t1+t2;
}
}
public class Context {
private Strategy strategy;
public Context(Strategy strategy){
this.strategy = strategy;
}
public Object getValue(Object t1,Object t2){
return strategy.calculate(t1,t2);
}
}