文档章节

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

奋斗到天明
 奋斗到天明
发布于 2015/08/27 17:39
字数 485
阅读 23
收藏 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
昌平
程序员
设计模式笔录(二),设计模式有哪些

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

方旭
2011/03/31
0
0
JavaScript常用设计模式

设计模式 设计模式是一种在长时间的经验与错误中总结出来可服用的解决方案。 设计模式主要分为3类: 创建型设计模式:专注于处理对象的创建 Constructor构造器模式,Factory工厂模式,Singl...

a独家记忆
07/13
0
0
java设计模式-- 单例模式

在很久之前,也就是在大二暑假的时候,那时候看马士兵的视频教程中有提到很多的设计模式。 java的设计模式大致可以分为3大类,23种设计模式。 其中,创建型模式有5种:单例模式、建造者模式、...

爱学习的逃课君
2014/11/27
0
0
设计模式Java Design Pattern-工厂方法模式FactoryMethod

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

勇敢写信
03/22
0
0
JAVA基础再回首(二十六)——面向对象思想设计原则、设计模式、简单工厂模式、工厂方法模式、单例设计模式之饿汉式和懒汉式、Runtime类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52717096 JAVA基础再回首(二十六)——面向对象思想设计原则、设计模式、简单工厂模...

Aduroidpc
2016/10/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
25分钟前
1
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
2
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
13
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0
Redis性能问题排查解决手册

一、性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息。通过这些信息来分析文章后面提到的一些性能指标。 nfo命令输出的数据可...

IT--小哥
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部