定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
我们将创建一个定义活动的 Strategy 接口和实现了 Strategy 接口的实体策略类。Context 是一个使用了某种策略的类。
StrategyPatternDemo,我们的演示类使用 Context 和策略对象来演示 Context 在它所配置或使用的策略改变时的行为变化。
2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。
在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。
1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。
public int calc(int num1,int num2);
public class AddStrategy implements Strategy{
public int calc(int num1, int num2) {
public class SubStrategy implements Strategy{
public int calc(int num1, int num2) {
public Environment(Strategy strategy) {
public int calulate (int num1, int num2) {
return strategy.calc(num1, num2);
public static void main(String[] args) {
Strategy strategy = new AddStrategy();
Environment environment = new Environment(strategy);
int result = environment.calulate(1, 1);