Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >设计模式 ☞ 行为型之策略模式

设计模式 ☞ 行为型之策略模式

作者头像
Demo_Null
发布于 2021-01-18 02:24:50
发布于 2021-01-18 02:24:50
4020
举报
文章被收录于专栏:Java 学习Java 学习

1.1 简介

1.1.1 概述

  策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。   在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。

1.1.2 优缺点

优点:  ① 多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句,如 if…else 语句、switch…case 语句。  ② 策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码。  ③ 策略模式可以提供相同行为的不同实现,客户可以根据不同时间或空间要求选择不同的。  ④ 策略模式提供了对开闭原则的完美支持,可以在不修改原代码的情况下,灵活增加新算法。  ⑤ 策略模式把算法的使用放到环境类中,而算法的实现移到具体策略类中,实现了二者的分离。

缺点:  ① 客户端必须理解所有策略算法的区别,以便适时选择恰当的算法类。  ② 策略模式造成很多的策略类,增加维护难度。

1.2 案例

  策略模式建议找出负责用许多不同方式完成特定任务的类,然后将其中的算法抽取到一组被称为策略的独立类中。名为上下文的原始类必须包含一个成员变量来存储对于每种策略的引用。上下文并不执行任务,而是将工作委派给已连接的策略对象。   上下文不负责选择符合任务需要的算法——客户端会将所需策略传递给上下文。 实际上,上下文并不十分了解策略,它会通过同样的通用接口与所有策略进行交互,而该接口只需暴露一个方法来触发所选策略中封装的算法即可。因此,上下文可独立于具体策略。这样你就可在不修改上下文代码或其他策略的情况下添加新算法或修改已有算法了。   在导航中,每个路线规划算法都可被抽取到只有一个生成路线方法的独立类中。 该方法接收起点和终点作为参数,并返回路线中途点的集合。即使传递给每个路径规划类的参数一模一样,其所创建的路线也可能完全不同。主要导游类的主要工作是在地图上渲染一系列中途点,不会在意如何选择算法。该类中还有一个用于切换当前路径规划策略的方法,因此客户端可用其他策略替换当前选择的路径规划行为。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Java设计模式】019-策略模式 Pro
**策略(Strategy)模式:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。**策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。
訾博ZiBo
2025/01/06
730
Java设计模式-策略模式
Java设计模式-策略模式,一起来看看吧,让我们一起为进阶做一个充足的准备吧!!!! 会了就当复习丫,不会来一起来看看吧。 很喜欢一句话:“八小时内谋生活,八小时外谋发展”。 如果你也喜欢,让我们一起坚持吧!! 共勉😁 我想这才是夏天吧,心目中的夏天 一、前言 1)引入: 在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,今天的作业该让这个女朋友写还是那个女朋友写勒?好难选啊,算了吧还是自己来吧。(其实就是没有😂)。正文:例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或
宁在春
2022/10/31
4330
Java设计模式-策略模式
设计模式-策略模式
策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。策略模式有以下优点:
六个核弹
2022/12/23
2740
设计模式~策略模式
其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。
Vincent-yuan
2020/08/28
4400
行为型之策略模式C++实现
现实需求:实现某种目标存在多种策略可供选择的情况,例如出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。
用户9831583
2022/06/16
2070
行为型之策略模式C++实现
设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法;当然也可以将这些查找算法封装在一个统一的方法中,通过if…else…或者case等条件判断语句来进行选择。这两种实现方法我们都可以称之为硬编码,如果需要增加一种新的查找算法,需要修改封装算法类的源代码;更换查找算法,也需要修改客户端调用代码。在这个算法类中封装了大量查找算法,该类代码将较复杂,维护较为困难。如果我们将这些策略包含在客户端,这种做法更不可取,将导致客户端程序庞大而且难以维护,如果存在大量可供选择的算法时问题将变得更加严重。
黄规速
2022/04/14
4210
设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
漫谈模式之策略模式
策略模式是一种行为型模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,使得算法可以独立于使用它们的客户端变化而变化。策略模式使得算法的变化可以独立于使用算法的客户端。
孟君
2023/03/24
7240
设计模式——策略模式
设计模式——策略模式
Java架构师必看
2021/05/14
2990
设计模式——策略模式
Java面向对象设计之策略模式
完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。在软件开发中也常常遇到类似的情况,实现某一个功能有多个途径,此时可以使用一种设计模式来使得系统可以灵活地选择解决途径,也能够方便地增加新的解决途径。
Abalone
2022/07/14
2980
Java面向对象设计之策略模式
策略模式(Strategy)
策略模式是一种行为型模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。
兜兜转转
2023/03/29
4730
策略模式(Strategy)
2023 跟我一起学设计模式:策略模式
策略模式是一种行为设计模式, 它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。
用户1418987
2023/10/16
2120
2023 跟我一起学设计模式:策略模式
CRUD很无聊?一起学设计模式吧!--策略模式
策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。
JAVA日知录
2019/10/19
4560
CRUD很无聊?一起学设计模式吧!--策略模式
23种设计模式之策略模式
策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数。
Java技术债务
2022/09/26
4830
23种设计模式之策略模式
设计模式(十四):行为型之策略模式
冬天vs不冷
2025/01/21
1050
设计模式(十四):行为型之策略模式
【设计模式系列】行为型之策略模式
首先介绍一下众多博客文章中提到的策略模式的概念,针对于文章结构构成,请允许小编在此处再细说一下。 策略模式:百度百科中引述为:指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。 1.策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。 2.策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。 【此处的算法,大家可以理解为解决业务需求的方法。】
沁溪源
2021/03/22
2850
【设计模式系列】行为型之策略模式
一起学设计模式 - 策略模式
策略模式: 是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。下面就以一个示意性的实现讲解策略模式实例的结构。
battcn
2018/08/03
3900
一起学设计模式 - 策略模式
Java设计模式——策略模式[通俗易懂]
策略模式:策略模式是一种行为型模式,它将对象和行为分开,将行为定义为 一个行为接口 和 具体行为的实现。策略模式最大的特点是行为的变化,行为之间可以相互替换。每个if判断都可以理解为就是一个策略。本模式使得算法可独立于使用它的用户而变化
全栈程序员站长
2022/09/30
4610
Java设计模式——策略模式[通俗易懂]
Java设计模式(十三)----策略模式
策略模式 一、概述 二、策略模式的结构 三、具体案例 四、认识策略模式 一、概述 1.定义 策略模式属于对象行为型模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响 到客户端的情况下发生变化。通常,策略模式适用于当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种实现方式时使用。 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 2.策略模
汤高
2018/01/11
3.8K0
Java设计模式(十三)----策略模式
Java二十三种设计模式-策略模式(13/23)
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
正在走向自律
2024/12/18
2170
Java二十三种设计模式-策略模式(13/23)
设计模式(十三):策略模式
设计模式(十三):策略模式
Java架构师必看
2021/04/13
2430
相关推荐
【Java设计模式】019-策略模式 Pro
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档