策略模式

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

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

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

策略模式的使用场景:

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();
 
 }

}

最后打印结果

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

 

 

 

 

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 策略模式

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址