原创

策略模式

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

定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化。
分析下定义,策略模式定义和封装了一系列的算法,它们是可以相互替换的,也就是说它们具有共性,而它们的共性就体现在策略接口的行为上,另外为了达到最后一句话的目的,也就是说让算法独立于使用它的客户而独立变化,我们需要让客户端依赖于策略接口。 策略模式的使用场景:
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();
 
 }

}
最后打印结果
骑自行去旅行
坐飞机去旅游
坐火车去旅行
       
正文到此结束
Loading...