1、策略模式概述:

策略模式(Strategy Pattern):定义一系列算法,将每个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式。策略模式是一种行为型模式《设计模式的艺术》

使用场景:

策略模式常用于解决某一个问题,或者是实现某个功能时会存在多种实现方法,因而将每个方法进行一定的封装,由使用者决定使用哪种方法。

2、策略模式UML类图:

image.png

Context(环境类):环境类作为策略的使用者,在实现某种功能时可以采取多种方法来实现。在环境类中维护一个策略类的引用,调用策略类的方法。

Strategy(抽象策略类):作为策略类的公共父类,定义策略类的基础方法。

ConcreteStrategy(具体策略类):实现抽象策略类中定义的公共接口,完成具体功能。

3、策略模式示例:

策略模式实现:

/**

* 视频播放器:环境类

*/

public class MediaPlayer {

private Decoder decoder;

public void setDecoder(Decoder decoder) {

this.decoder = decoder;

}

public void decodeVideo() {

decoder.decodeVideo();

}

}

/**

* 抽象策略类

*/

public abstract class Decoder {

abstract void decodeVideo();

}

public class MediaCodecDecoder extends Decoder {

@Override

void decodeVideo() {

System.out.println("this is MediaCodecDecoder");

}

}

public class FfmpegDecoder extends Decoder {

@Override

void decodeVideo() {

System.out.println("this is FfmpegDecoder");

}

}

上面示例为一个视频播放器模块,由于播放器在解码的时候可以选择多种解码方法, 因此设计时采用策略模式。将每种解码方法封装成一个类,抽象出一个Decoder抽象类,定义解码的标准接口。播放器内部维护一个Decoder对象,根据当前码率以及平台决定使用哪种解码方式。

4、优缺点分析:

优点:

1)策略模式完美体现类开闭原则,扩展性非常好;

2)使用策略模式与状态模式有个共同有点,避免大量判断逻辑代码;

缺点:

1)客户端需要知道所有策略类,自行决定使用哪一种策略;

2)当有新策略产生时需要增加一个策略类,导致系统的类会越来复杂;

结束语

策略模式只适用于一个问题对应多种解决方案的场景,如果不满足次条件不要滥用。相对来说,策略模式理解很简单。

java 策略模式例子_java策略模式实例解析相关推荐

  1. java线程同步例子_JAVA线程同步实例教程

    线程是Java程序设计里非常重要的概念,本文就以实例形式对此加以详细解读.具体分析如下: 首先,线程加锁有什么用处呢?举个例子:比如你现在有30000块大洋在银行存着,现在你到银行取钱,当你输入密码完 ...

  2. java 23种设计模式详尽分析与实例解析_Java 23种设计模式详尽分析与实例解析之一--创建型模式...

    模式分析:在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做.这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责哪一个产品类被实例化这种细节,使得工厂方法模式允许 ...

  3. java 状态模式 重试_java状态模式

    一:状态模式 描述: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式. 状态模式允许一个对象在其内部状态改变的时候改变其行为.这个对 ...

  4. java抽象类例子_java抽象类经典实例分享

    在这之前有给大家详细的介绍过java抽象类,相信很多人应该都比较了解了,那么下面就要继续来给大家分享一个java抽象类的实例. 题目: 不同几何图形的面积计算公式是不一样的,可是,它们具有的特性是一样 ...

  5. java线程安全例子_Java总结篇系列:Java多线程(三)

    本文主要接着前面多线程的两篇文章总结Java多线程中的线程安全问题. 一.一个典型的Java线程安全例子 1 public classThreadTest {2 3 public static voi ...

  6. java try catch 例子_Java异常处理综合例子(try、catch、finally、throws、throw)

    Java异常处理综合例子(try.catch.finally.throws.throw) 佟强 2009年11月4日 http://blog.csdn.net/microtong package cn ...

  7. java实现quartz定时器_java定时器quartz实现解析

    上次我们了解过了timer的有关内容,这次来了解下另外一个定时器quartz的实现,快来看看吧. 1.首先,在pom.xml中进行最重要也是基础的导包环节 org.quartz-scheduler q ...

  8. 数据结构java实验 刘小晶_数据结构实例解析与实验指导:Java语言描述

    部分 知识提炼与实例解析 章 绪论 1.1 数据结构的基本概念 1.1.1 知识提炼 1.1.2 典型实例解析 1.1.3 实例练习 1.2 算法与算法分析 1.2.1 知识提炼 1.2.2 典型实例 ...

  9. java策略模式案例_java策略模式典型案例

    java策略模式典型案例 java策略模式典型案例 [var1] 参考代码 : https://github.com/zhang-xiaoxiang/DesignPatterns23 没有用策略模式我 ...

最新文章

  1. 【selenium 3】 Mac 下测试环境搭建 Firefox 47+ gecko driver Mac
  2. 新手初学html日志 (一)
  3. C++成员函数在内存中的存储方式
  4. 文件加载顺序_Springboot配置文件存放位置及读取顺序
  5. 浅谈unity中gamma空间和线性空间
  6. 33个热门数据分析软件,你都用过哪些?
  7. Eclipse启动时布局不合理调整
  8. 前端学习(1561):ng-class颜色切换
  9. 17-8-26-WebApp总结
  10. 【jQuery笔记Part1】03-jQuery加载模式对比JS
  11. 没有计算机基础可以学python-没有计算机基础可以参加Python培训吗?老男孩教育...
  12. VUE day_08(7.26)学子商城项目详细版
  13. 银行保险机构信息科技外包风险管理办法学习笔记
  14. 找出数组中重复的值和所在位置
  15. unity 暂停按钮_Unity通过按钮控制视频播放与停止
  16. ECMAScript-函数
  17. SpiderMonkey 入门
  18. 怎么把qlv格式转换成mp4?快速转换qlv格式的方法
  19. 新浪微博Android客户端开发之OAuth认证篇
  20. 【Python量化策略】SMA双均线策略

热门文章

  1. 为什么我在领英上搜到的客户都是显示领英会员(Linkedin Member)?
  2. Linux内核内存相关问题,这一篇让你彻底了解
  3. 用数字和事实说话,让你直观感受:华为究竟有多强!
  4. 知乎日报 API 分析(如何规范api设计)
  5. SpringBoot报错:Caused by: org.yaml.snakeyaml.error.YAMLException: java.nio.charset.Malforme
  6. 热点全能服务器系统,云服务器win系统开热点
  7. 图像美学质量评价技术总结
  8. 神经网络与智能信息处理
  9. 观察者模式--微信公众号文章的推送
  10. 233网校计算机二级百度云盘6,2014年计算机二级考试《 Access》机考操作题题库(6)...