文档章节

行为型模式之三:策略模式

奋斗到天明
 奋斗到天明
发布于 2015/08/27 17:39
字数 485
阅读 79
收藏 0

码上生花,ECharts 作品展示赛正式启动!>>>

策略模式也被叫做政策模式。 这里有关于策略模式的故事,可能Mike驾车有时候会超载,但是不会经常这样。他可能被交警叫停,可能交警是好人,不会罚单和警告(我们叫这类为NicePolice)。也可能被坏警察抓住,并罚单(我们叫这类为HardPolice)。他不知道那种警察会叫停他,直到他被实际抓住,那就是运行时,这就是策略模式整个点。

策略模式类图

策略模式Java代码

定义策略模式接口,拥有一个方法叫 processSpeeding()

public interface Strategy {
  //defind a method for police to process speeding case.
  public void processSpeeding(int speed);
}

现在我们有两种交警

public class NicePolice implements Strategy{
  @Override
  public void processSpeeding(int speed) {
    System.out.println("This is your first time, be sure don't do it again!");		
  }
}
public class HardPolice implements Strategy{
  @Override
  public void processSpeeding(int speed) {
    System.out.println("Your speed is "+ speed+ ", and should get a ticket!");
  }
}

定义一个场景,交警会涉及去处理超速

public class Situation {
  private Strategy strategy;
 
  public Situation(Strategy strategy){
    this.strategy = strategy;
  }
 
  public void handleByPolice(int speed){
    this.strategy.processSpeeding(speed);
  }
}

最后,看看结果

public class Main {
  public static void main(String args[]){
    HardPolice hp = new HardPolice();
    NicePolice ep = new NicePolice();
 
    // In situation 1, a hard officer is met
    // In situation 2, a nice officer is met
    Situation s1 = new Situation(hp);
    Situation s2 = new Situation(ep);
 
    //the result based on the kind of police officer.
    s1.handleByPolice(10);
    s2.handleByPolice(10);        
  }
}

输出

Your speed is 10, and should get a ticket!
This is your first time, be sure don't do it again!

你可以比较这个模式与 状态模式,他们两个很想。最大的区别是,当状态对象修改时,状态模式涉及修改一个对象的状态。策略模式主要是在不同的场景使用不同的算法。 策略模式在JDK中 

1). Java.util.Collections#sort(List list, Comparator < ? super T > c) 

2). java.util.Arrays#sort(T[], Comparator < ? super T > c) 排序方法在不同的场景使用不同的比较器。

想知道更多的例子,请查看: 深入了解Array.sort();

© 著作权归作者所有

奋斗到天明
粉丝 19
博文 112
码字总数 82707
作品 0
昌平
程序员
私信 提问
加载中
请先登录后再评论。
工作流系统之三十二 设计模式在工作流系统开发中的运用

GoF四人组一共介绍了23种面向对象的设置模式,为每一种特定的实现取了一个名字,根据模式的应用目的不同,将他们分为3类,创建型、结构性和行为型。 面向对象设计三原则: 优先使用组合 针对...

长平狐
2012/10/11
204
0
设计模式 Vs实践-1 工厂模式

前言:设计模式在实际项目开发中应用的比较多(可能大部分人都用到了,但是并不知道属于哪种设计模式),一般都是先实现个小功能,然后看需求进行重构 本系列笔记主要把所有设计模式示例代码...

zhaogaojian
03/14
0
0
北风设计模式课程---策略模式和工厂模式的区别

北风设计模式课程---策略模式和工厂模式的区别 一、总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 1、策略模式和工厂方法模式 相像 在哪? 都是多...

osc_gi8cj19l
2019/06/15
12
0
北风设计模式课程---创建模式、结构模式、行为模式的区别

北风设计模式课程---创建模式、结构模式、行为模式的区别 一、总结 一句话总结: 创建模式:【关注对象的创建】:创建型模式,就是创建对象的模式,抽象了实例化的过程。 结构模式:结构型模...

osc_tartz9st
2019/06/16
5
0
Android开发中常见的设计模式 MD

Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com 目录 目录 ---------- 创建型模式 - 6个 ---------- - 单...

osc_3rll7emc
2019/04/06
6
0

没有更多内容

加载失败,请刷新页面

加载更多

Springboot Actuator

Springboot Actuator 1. 启用springboot actuator <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>dep......

AngerWind
44分钟前
18
0
OSChina 周日乱弹 —— 一个幼小的猕猴桃等待食物转身

1@ 辽元 起床以后, 突然发现时间已经10点啦! 不会晚了吧? 忽然想起来今天是周末, 13 “梦见自己变成猫后,一下子惊醒了,不对是笑醒了。” @冰峰雪座 觉得昨晚的睡眠质量实在不是很好, ...

小小编辑
46分钟前
25
0
【第一行代码--Android】Kotlin入门教程精简版

Google在2017年的I/O大会上宣布Kotlin正式成为Android的以及开发语言,Android Studio也对Kotlin提供了全面支持。 怎样运行kotlin的代码?通过https://try.kotlinlang.org 或者 IDEA 以及 其...

Drop_Table_User
53分钟前
11
0
解决Cannot download "https://github.com/sass/node-sass/releases/download/binding.nod的问题

输入命令解决即可 npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/

千年典韦
58分钟前
10
0
测试jar 是否完整有错

cd WEB-INF/lib/for j in *.jar; do echo $j; jar tvf $j > /dev/null ; echo $j done; done

xiaodong16
今天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部