策略模式的定义和使用场景
定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化。
分析下定义,策略模式定义和封装了一系列的算法,它们是可以相互替换的,也就是说它们具有共性,而它们的共性就体现在策略接口的行为上,另外为了达到最后一句话的目的,也就是说让算法独立于使用它的客户而独立变化,我们需要让客户端依赖于策略接口。
策略模式的使用场景:
1.针对同一类型问题的多种处理方式,仅仅是具体行为有差别时;
2.需要安全地封装多种同一类型的操作时;
3.出现同一抽象类有多个子类,而又需要使用 if-else 或者 switch-case 来选择具体子类时。
策略模式例子
出行旅游:我们可以有几个策略可以考虑:可以骑自行车,汽车,做火车,飞机。每个策略都可以得到相同的结果,但是它们使用了不同的资源。选择策略的依据是费用,时间,使用工具还有每种方式的方便程度 。
具体的java代码实现
定义一个person类
package org.java.base.pattern.strategy;
public class StrategyPatternDemo {
public static void main(String[] args) {
Person person = new Person(new BicycleStrategy());
person.travel();
person.setStrategy(new AirPlanelStrategy());
person.travel();
person.setStrategy(new TrainStrategy());
person.travel();
}
}
定义旅行的接口类
package org.java.base.pattern.strategy;
public interface TravelStrategy {
public void travel();
}
实现具体的旅行方式-火车
package org.java.base.pattern.strategy;
public class TrainStrategy implements TravelStrategy {
@Override
public void travel() {
System.out.println("坐火车去旅行");
}
}
实现具体的旅行方式-飞机
package org.java.base.pattern.strategy;
public class AirPlanelStrategy implements TravelStrategy {
@Override
public void travel() {
System.out.println("坐飞机去旅游");
}
}
实现具体的旅行方式-自行车
package org.java.base.pattern.strategy;
public class BicycleStrategy implements TravelStrategy {
@Override
public void travel() {
System.out.println("骑自行去旅行");
}
}
测试类
package org.java.base.pattern.strategy;
public class StrategyPatternDemo {
public static void main(String[] args) {
Person person = new Person(new BicycleStrategy());
person.travel();
person.setStrategy(new AirPlanelStrategy());
person.travel();
person.setStrategy(new TrainStrategy());
person.travel();
}
}
最后打印结果
骑自行去旅行
坐飞机去旅游
坐火车去旅行