策略模式

177 阅读2分钟

策略模式的定义和使用场景

定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化。

分析下定义,策略模式定义和封装了一系列的算法,它们是可以相互替换的,也就是说它们具有共性,而它们的共性就体现在策略接口的行为上,另外为了达到最后一句话的目的,也就是说让算法独立于使用它的客户而独立变化,我们需要让客户端依赖于策略接口。

策略模式的使用场景:

1.针对同一类型问题的多种处理方式,仅仅是具体行为有差别时;
2.需要安全地封装多种同一类型的操作时;
3.出现同一抽象类有多个子类,而又需要使用 if-else 或者 switch-case 来选择具体子类时。

策略模式例子

出行旅游:我们可以有几个策略可以考虑:可以骑自行车,汽车,做火车,飞机。每个策略都可以得到相同的结果,但是它们使用了不同的资源。选择策略的依据是费用,时间,使用工具还有每种方式的方便程度 。

1336731431_2462

具体的java代码实现

1336733743_7225

定义一个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();
 
 }

}

最后打印结果

骑自行去旅行
坐飞机去旅游
坐火车去旅行