1:策略模式的描述
把它们一个个封装起来,并且使他们可以相互替换。这样策略模式就可以独立使用它们的客户端变化。
策略模式其实是为了解决,同一个问题有多个不能的解决方式,也就是说提供了多种不同的解决策略,比如,我们对一个数组 进行排序。那么这里就有冒泡排序、快速排序、归并排序等等不同的算法,这里我们就可以说这些是不同的策略。
2:策略模式的具体实现:
2.1)公共接口(比如提供一个格式化时间的方法):
public interface FormatTime {
public String format(long millis);
}
2.2)接口的实现:
public class FormatWithChinese implements FormatTime {
@Override
public String format(long millis) {
int s = (int) (millis / 1000);
int h = s / (60 * 60);
s = s % (60 * 60);
int m = s / 60;
s = s % 60;
return StringUtils.formatIntegerString(h, "#00") + "时"
+ StringUtils.formatIntegerString(m, "#00") + "分"
+ StringUtils.formatIntegerString(s, "#00") + "秒";
}
}
2.3)定义具体的策略:
public class StrategyContains {
private FormatTime formatTime; //接口
public StrategyContains(FormatTime _formatTime) {
this.formatTime = _formatTime;
}
public String format(long millis) {
return formatTime.format(millis); //接口的方法
}
}
2.4)测试:
public class FormatTimeClient {
public static void main(String[] args) {
StrategyContains strategy = new StrategyContains(new FormatWithChinese ());
System.out.println(strategy.format(155796986));
}
}
3:策略模式的分析:
抽象策略(Strategy)角色:是抽象类或接口来承担,它给出具体策略角色需要实现的接口;
具体策略(ConcreteStrategy)角色:实现封装了具体的算法或行为;
场景(Context)角色:持有抽象策略类的引用。