文档章节

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

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

策略模式也被叫做政策模式。 这里有关于策略模式的故事,可能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();

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
私信 提问
PHP设计模式(一):简介及创建型模式

我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式。 一、设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用、容易被他人理解的、可靠的代码设...

juhenj
2014/05/15
228
2
设计模式Java Design Pattern-工厂方法模式FactoryMethod

我的博客 一、 设计模式的分类 大体可以分为三类: 创建型模式(5个) 单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式 结构性模式(7个) 适配器模式、装饰器模式、代理模式、...

勇敢写信
03/22
0
0
工作流系统之三十二 设计模式在工作流系统开发中的运用

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

长平狐
2012/10/11
111
0
小菜学设计模式——设计模式总结之创建型

1、面向过程与面向对象 1)面向过程通过划分功能模块,通过函数间相互调用来实现,但需求变化时就需要更改函数,而你改动的函数有多少地方在调用她呢?关联多少数据,这是很不容易弄得清楚地...

learn_more
2015/07/05
0
0
设计模式笔录(二),设计模式有哪些

本人出道5年,学习、编程、再学习、再编程一路走过,只是在笔和纸留下些脚印,实感惭愧。现开始把自己学习到的心得,实践中的体会,一一贴在互联网上,大家互相学习、探讨,寻找一些技术朋友...

方旭
2011/03/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

vue-cli 3 分环境打包

在vue-cli3的项目中, npm run serve时会把process.env.NODE_ENV设置为‘development’; npm run build 时会把process.env.NODE_ENV设置为‘production’; 此时只要根据process.env.NODE_...

灰白发
13分钟前
1
0
集合初始化,泛型及相关操作

集合初始化通常进行分配容量,设置特定参数等相关工作,推荐在任何情况下,都需要显式地设定集合容量的初始大小。 ArrayList 使用无参构造时,默认大小为 10 ,也就是说在第一次add的时候,分...

Canaan_
23分钟前
1
0
Sping之项目中pofile的应用

工程中,我们必须要面对的一件事就是, 开发环境中使用的数据库连接地址等与生产上的不同, 如果上线, 那么我们是否还要手动修改这些地址么, 这样做有很多弊端, 不方便, 这时我们就可以使用spr...

克虏伯
30分钟前
0
0
Linux中安装MySQL

Linux中安装MySQL 一、准备工作 此处准备的操作系统位CentOS 7。 MySQL安装包: MySQL-server-5.6.29-1.linux_glibc2.5.x86_64.rpm MySQL-client-5.6.29-1.linux_glibc2.5.x86_64.rpm 将准备......

星汉
35分钟前
1
0
深入理解Hadoop之HDFS架构

Hadoop分布式文件系统(HDFS)是一种分布式文件系统。它与现有的分布式文件系统有许多相似之处。但是,与其他分布式文件系统的差异是值得我们注意的: HDFS具有高度容错能力,旨在部署在低成...

架构师springboot
39分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部