设计模式之策略模式-Java语言描述

Zabbix-01简单导入MIB文件并测试 这里写自定义目录标题安装 MIB文件启用MIB文件测试MIB文件 MIB文件 MIB代表管理信息库。 MIB文件允许您使用OID(对象标识符)的文本表示。 ##例如: ifHCOutOctets 是OID【1.3.6.1.2.1.31.1.1.1.10】的文本表示 安装 MIB文件 在基于Debian的系统上: # apt install snmp-mibs-downloader # download-mibs 在基于RedHat的系统上: # yum install net-snmp-libs 启用M 阅读详情

设计模式之策略模式

策略模式
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。
这种类型的设计模式属于行为型模式。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。
策略对象改变 context 对象的执行算法。

策略模式是指有一定行动内容的相对稳定的策略名称。策略模式在古代中又称“计策”,简称“计”,
如《汉书·高帝纪上》:“汉王从其计”。这里的“计”指的就是计谋、策略。策略模式具有相对稳定的形式,
如“避实就虚”、“出奇制胜”等。一定的策略模式,既可应用于战略决策,也可应用于战术决策;
既可实施于大系统的全局性行动,也可实施于大系统的局部性行动。


先直接贴栗子吧,概念在文章最后会介绍,也可以自行百度

我们有一个系统对接了各大主流的新闻网站,在我们的系统在中录入新闻可以实现一键发布到指定的网站中,
现在需要实现这个功能。主要需求:

  1. 各个网站的对接逻辑不同,需要解耦。
  2. 对于客户端的使用习惯不能有影响。
    考虑再三决定使用策略模式来解决
步骤一:创建一个上传接口
/**
 * 上传接口
 *
 * @author shenjg
 * @date 2019/07/23
 **/
public interface UploadService {

    /**
     * 上传数据到网站
     *
     * @param object
     */
    void uploadToWeb(Object object);
}
步骤二:针对不同网站实现接口
/**
 * 上传数据到百度
 *
 * @author shenjg
 * @date 2019/07/23
 **/
public class BaiduUploadService implements UploadService {
    @Override
    public void uploadToWeb(Object object) {
        // do something
        System.out.println("执行上传到百度所需要的逻辑" + object);
    }
}
/**
 * 上传数据到新浪
 *
 * @author shenjg
 * @date 2019/07/23
 **/
public class SinaUploadService implements UploadService {
    @Override
    public void uploadToWeb(Object object) {
        // do something
        System.out.println("执行上传到新浪所需要的逻辑" + object);
    }
}
/**
 * 上传数据到腾讯
 *
 * @author shenjg
 * @date 2019/07/23
 **/
public class TencentUploadService implements UploadService {
    @Override
    public void uploadToWeb(Object object) {
        // do something
        System.out.println("执行上传到腾讯所需要的逻辑" + object);
    }
}
步骤三:创建context
/**
 * @author shenjg
 * @date 2019/07/23
 **/
public class UploadContext {

    private UploadService uploadService;

    public UploadContext(UploadService uploadService) {
        this.uploadService = uploadService;
    }

    public void uploadToWeb(Object object) {
        uploadService.uploadToWeb(object);
    }
}
步骤四:测试
/**
 * 策略模式测试类
 *
 * @author shenjg
 * @date 2019/07/23
 **/
public class StrategyTest {
    public static void main(String[] args) {

        Object object = new Object();

        // 上传object到百度
        UploadContext baiduUpload = new UploadContext(new BaiduUploadService());
        baiduUpload.uploadToWeb(object);

        // 上传object到腾讯
        UploadContext tencentUpload = new UploadContext(new TencentUploadService());
        tencentUpload.uploadToWeb(object);


        // 上传object到新浪
        UploadContext sinaUpload = new UploadContext(new SinaUploadService());
        sinaUpload.uploadToWeb(object);

    }
}

输出打印

执行上传到百度所需要的逻辑java.lang.Object@610455d6
执行上传到腾讯所需要的逻辑java.lang.Object@610455d6
执行上传到新浪所需要的逻辑java.lang.Object@610455d6

点击查看完整代码github

介绍

策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。例如:
我们需要上传同一篇文章到新浪、腾讯、百度三大网站中,此时系统针对不同网站就需要不同的对接逻辑。
策略模式:

  • 定义了一组算法(业务规则);
  • 封装了每个算法;
  • 这族的算法可互换代替(interchangeable)

组成

  • 抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
  • 具体策略角色:包装了相关的算法和行为。
  • 环境角色:持有一个策略类的引用,最终给客户端调用。
    策略模式UML图

应用场景:

  1. 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
  2. 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
  3. 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。

优缺点

优点

  • 策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码转移到父类里面,从而避免重复的代码。
  • 策略模式提供了可以替换继承关系的办法。继承可以处理多种算法或行为。如果不是用策略模式,那么使用算法或行为的环境类就可能会有一些子类,每一个子类提供一个不同的算法或行为。但是,这样一来算法或行为的使用者就和算法或行为本身混在一起。决定使用哪一种算法或采取哪一种行为的逻辑就和算法或行为的逻辑混合在一起,从而不可能再独立演化。继承使得动态改变算法或行为变得不可能。
  • 使用策略模式可以避免使用多重条件转移语句。多重转移语句不易维护,它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起,统统列在一个多重转移语句里面,比使用继承的办法还要原始和落后。

缺点

  • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。
  • 策略模式造成很多的策略类,每个具体策略类都会产生一个新类。有时候可以通过把依赖于环境的状态保存到客户端里面,而将策略类设计成可共享的,这样策略类实例可以被不同客户端使用。换言之,可以使用享元模式来减少对象的数量。
老电脑续命神器:Windows 11 26H1 精简游戏版,帧率稳定无压力!(Win11 26H1 极致精简游戏版(3.17G):装完只占 8G 内存,Ultra CPU 性能拉满) 旧电脑福音也能安装windows11畅玩游戏🎮:文章分享一款 Windows 11 26H1 精简游戏版,仅 3.17G、C 盘占用 8G,开机进程约 50 个,内存占用 1.4G,内置游戏优化与运行库,支持离线安装、跳过 TPM 检测,让老电脑也能畅玩 3A 游戏和办公娱乐 🚀。 阅读详情

相关推荐

实战分享:如何用Java调用Doris FE接口实现高效Stream Load数据导入(附完整代码)

本文详细介绍了如何通过Java调用Doris FE接口实现高效的Stream Load数据导入,包含完整代码示例和性能优化技巧。Stream Load作为Doris的高效数据导入方式,相比传统JDBC提升5-10倍速度,适用于大规模数据处理场景,帮助开发者解决高吞吐量数据导入挑战。

weixin_29304985的博客 419

用java语言讲述设计模式---策略与模式

遗留问题 策略模式与缺点(2)的解决 对比Java设计模式编程中的状态模式和策略模式 策略模式使用场景 针对同一种类型的问题处理方法上,只是具体的行为有一定的差别(通过不同的算法来实现同一类型的问题) 对客户隐藏具体策略(算法)的实现细节,彼此完全独立 策略模式的重心 策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。 运行时策略的唯一性

sinat_30552885的博客 432

OSMDroid(1)——OSM简介,基础例子搭建

1.OSMDroid简介 Osmdroid是一款完全开源的地图基本操作SDK,相比于现在普遍使用的百度地图,高德地图,谷歌地图等最大的好处就是开源。 最近在做一个军方项目,要求完全不能联网,从开发到应用整个阶段都是在局域网进行,相比之下采用了OSMDroid这个SDK作为解决方案。 先来看OSMDroid,便是(OpenStreetMapForAndroid),后面都简称OSM...

robotskly的博客 6180

java策略者模式的描述_设计模式之策略模式-Java语言描述

设计模式之策略模式策略模式在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。策略模式是指有一定行动内容的相对稳定的策略名称。策略模式在古代中又称“计策”,简称“计”,如《汉书·高帝纪上...

weixin_39580682的博客 107

汇川EASY521 PLC实战指南:从硬件选型到程序架构与故障排查

可编程逻辑控制器(PLC)是工业自动化系统的核心大脑,其工作原理基于循环扫描机制,持续读取输入、执行用户程序并更新输出。这种确定性控制方式,使其在逻辑控制、顺序控制和运动控制中具有不可替代的技术价值,广泛应用于机械设备、生产线和过程控制等场景。对于汇川EASY521这类紧凑型高性能PLC,其核心优势在于集成了运动控制与丰富通讯接口,为中小型设备提供了高性价比的一站式解决方案。在实际应用中,工程师常需处理如“汇川sv660n”伺服驱动器的集成调试,或利用“hslcommunication”等开源库实现C#上位

weixin_42525264的博客 736

OpenVox 8FXO板卡驱动安装记录

OpenVox A800P和A1200P的板卡驱动安装及问题解决方法

clliu的专栏 2463

AI如何帮你高效使用Java枚举(ENUM)

以订单状态为例,我只需要告诉AI:"生成一个订单状态枚举,包含NEW(新建)、PROCESSING(处理中)、SHIPPED(已发货)、DELIVERED(已送达)四个状态,每个状态要有状态码和中文描述"。作为一个经常和状态码打交道的开发者,我发现Java枚举(ENUM)真是个好东西,但每次手动编写枚举类还是有点繁琐。最方便的是,生成的项目可以直接部署测试,省去了环境配置的麻烦。特别是枚举这种模式固定的代码,交给AI生成后再做微调,既保证了代码质量,又节省了开发时间。AI生成枚举的基本流程。

AgatePanther34的博客 163

2026滑块验证码终极实战:缺口检测算法+人机轨迹模拟,识别率从60%飙升至95%全方案

**摘要:2026年AIGC技术发展导致传统验证码失效,滑块验证码成为主流防护手段。本文深入分析了传统方案识别率低的原因,并提出多级检测融合和行为拟合优化方案。通过图像预处理优化、三级缺口检测引擎(差分图像法、Hu矩轮廓匹配、YOLOv8n模型兜底)将识别率提升至99.2%。同时针对轨迹模拟环节,设计了包含抖动特征、时间随机性和个体差异的行为模型,使通过率从12%提升至87%。该方案解决了传统方法在缺口定位精度和轨迹真实性方面的核心痛点,为应对新一代验证码风控提供了完整的技术框架。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1899

策略模式详解(用java语言实现策略模式)

策略模式(Strategy Pattern): 定义一系列的算法,把它们一个个封装起来,并且使他们可相互替换。本模式使得算法的变化可以独立于使用它的客户。(Define a family of algorithms,encapsulate each one and make them interchangeable.Strategy lets the algorithmvary independ......

数据知道的博客 2万+

Unity零基础到入门 ☀️| 轻松学会 Unity界面布局和简单实例——入门级!(^_−)☆

入门级Unity知识,一起加油呀!

努力前行,总会成为自己心中的那道光 1万+

YOLOv8n轻量化实战:10分钟打通实时摄像头目标检测,附参数调优与避坑指南

本文介绍了如何快速入门YOLOv8目标检测框架,通过摄像头实战实现实时检测。YOLOv8凭借轻量化架构和跨平台优势,是新手入门的理想选择。文章详细讲解了环境搭建(1分钟完成)、核心代码逻辑(3分钟掌握)以及性能调优技巧(3分钟进阶),提供可直接运行的代码示例。重点包括:模型选择(优先yolov8n.pt)、摄像头参数优化、置信度阈值调整、检测类别指定等实用技巧,帮助开发者快速实现10-15FPS的实时检测效果,并针对不同场景提供优化建议。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 370

Java设计模式之策略模式

Spring AOP 提供了不同的切面(aspect)实现类,而调用者可以通过配置来指定不同的切面策略,例如通过切面实现类实现事务管理、日志记录等功能。总之,策略模式是一种常用的设计模式,在 Java 中有很多使用策略模式的代码。这些代码的共同点是它们将不同的算法或者行为封装到不同的策略类中,并且允许调用者根据需要选择不同的策略实现类来实现不同的行为。在Java中,策略模式经常被用于解决业务中的问题,例如根据不同的用户类型提供不同的价格计算策略,或者根据不同的排序方式对一组数据进行排序等。

swadian2008的博客 1110

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[设计模式Java实现附plantuml源码~行为型]算法的封装与切换——策略模式

策略模式用于算法的自由切换和扩展,它是应用较为广泛的设计模式之一。策略模式对应于解决某一问题的一个算法族,允许用户从该算法族中任选一个算法来解决某一问题,同时可以方便地更换算法或者增加新的算法。只要涉及算法的封装、复用和切换都可以考虑使用策略模式。

程序员三木的博客 1352

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java二十三种设计模式-策略模式(13/23)

策略模式是一种行为型设计模式,它允许在运行时选择算法的行为,将算法封装在独立的策略类中,从而让算法可以互相替换。清晰的合同:策略接口应该清晰地定义策略的合同,让实现者容易理解和实现。合理定义:确保策略接口的定义合理,既不要太宽泛也不要太狭窄。策略模式提供了一种灵活的方式来替换和扩展算法,使得系统更加灵活和可扩展。通过本文的深入分析,希望读者能够对策略模式有更全面的理解,并在实际开发中做出合理的设计选择。博主还写了其他Java设计模式关联文章,请各位大佬批评指正:(一)

小相探索IT世界 1970

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

深入理解JavaScript设计模式之策略模式

本文我以幽默+实践的方式学习策略模式,通过计算年终奖,表单校验,柯里化策略模式方法校验深入学习总结策略模式,反复学,反复看!

前端开发工程师 1935

【Java设计模式】1.策略模式

【java设计模式】1.策略模式写在文章的最前面什么是设计模式?问题的引出功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导...

qq_37344025的博客 799

Python设计模式之策略模式

前言设计模式是我们实际应用开发中必不可缺的,对设计模式的理解有助于我们写出可读性和扩展更高的应用程序。虽然设计模式与语言无关,但并不意味着每一个模式都能在任何语言中使用,所以有必要去针对语言的特性去做了解。设计模式特别是对于java语言而言,已经有过非常多的大牛写过,所以这里我就不重复了。对于Python来说就相对要少很多,特别是python语言具有很多高级的特性,而不需要了解这些照样能满足开发中的

丶legend的博客 2491

设计模式实战教程:基于 youngyangyang04/DesignPattern 开源项目

设计模式实战教程:基于 youngyangyang04/DesignPattern 开源项目 本教程旨在全面介绍位于 GitHub 的设计模式开源项目。通过深入浅出的讲解,我们将涵盖项目的核心要素,提供快速上手指南,展示经典应用场景,以及探索其在技术生态中的位置。 1. 项目介绍 设计模式 是软件开发中的一套成熟解决方案,用于解决常见的设计问题并促进代码的可重用性、可维护性和扩展性。此开源项目 D...

gitblog_00568的博客 1057

【设计模式】 策略模式介绍及C代码实现

策略模式(Strategy Pattern)是一种常用的面向对象设计模式,它定义了一系列可互相替换的算法或策略,并将每个算法封装成独立的对象,使得它们可以在运行时动态地替换。具体来说,策略模式定义了一系列算法,每个算法都封装在一个具体的策略类中,这些策略类实现了相同的接口或抽象类。在使用算法的时候,客户端通过一个上下文对象来调用策略类的方法,从而完成算法的执行。这样,客户端可以在运行时动态地选择不同的策略类,从而实现不同的行为。

物联网布道师 1427

c语言,去你的策略模式!

前言+这里先插一点题外话,在C语言中,实现封装、继承、隐藏、多态等等特性,是完全没有问题的。但是在使用过程中,必定是不如自带这些特性的语言方便好用的,比如C++\java等。一旦要通过C...

qq_35579835的博客 596

设计模式之策略模式(Java 实现)

设计模式之策略模式(Java 实现) 大家一定都使用过电子地图。在地图中输入出发地和目的地,然后再选取你的出行方式,就可以计算出最优线路以及预估的时长。出行方式有驾车、公交、步行、骑行等。出行方式不同,计算的线路和时间当然也不同。 其实出行方式换个词就是出行策略。而策略模式就是针对此类问题的设计模式。生活中这种例子太多了,比如购物促销打折的策略、计算税费的策略等等。相应的策略模式也是一种常用的设计模式。本节我们会以电子地图为例,比较工厂模式和策略模式,讲解策略模式的原理。最后结合工厂模式改造策略模式的代码实

稀有气体的技术博客 2375

Java23种设计模式——14.行为型模式之策略模式

Java中除去有设计原则之外,还有23中设计模式。 这些模式都是前辈们一点一点积累下来,一直在改进,一直在优化的,而这些设计模式可以解决一些特定的问题。 并且在这些模式中,可以说是将语言的使用体现的淋漓尽致。 那我们今天要学习行为型模式中的策略模式! 策略模式 先来看看什么叫策略模式 这个模式百度百科介绍的还是可以的,但是看不太懂,我们举个栗子就可以啦 好比说我们现在要去 A 这个城市,我们可以有很多种方式过去,可以自己开车,或者坐火车,或者汽车,坐飞机等等 就类似上面这...

胖子胖子大胖子的博客 1204

Java设计模式—策略模式

现在,我在学习的东西叫做策略模式,简单叙述一下我目前的,学习成果: 策略模式是什么? 作为一个编程语言的设计模式,设计模式要做的就是把一些大家写好的程序进行规范化。而我目前学的策略模式,它定义了算法,分别封装起来,让他们可以相互替换,这种模式可以让算法的变化独立与使用者。 举例子 关于策略模式,我们可以靠理解对象“人类”来感受。 人类可以分为——男人,女人。 我们把他们写成类 class Men{...

qq_44965498的博客 165

前后端视角看设计模式——策略模式

设计模式是经验之谈,对某些需求情况下的良好实践进行了归纳,虽然并非必须遵守的准则,却能对我们解决各类问题提供指引。不同语言拥有不同特性,对各类设计模式的支持度不尽相同,比如原型模式在js中是天然实现的,java也有内置的迭代器模式——有些泛用性强的模式,经过长年累月重复使用,最终会被固化到语言中。 对不同语言使用的多了,常常能感受到不同特性间的相互碰撞。于是笔者想借助前后端两门代表性...

m0_37828249的博客 287

一天一个设计模式——策略模式

策略模式是一种行为型设计模式,它允许你在运行时选择不同的算法或行为,而无需修改调用它们的代码。简单来说,它就像一个“可替换的工具箱”,你可以根据需要选择不同的工具(策略)来完成任务。核心思想定义一组算法(策略),将每个算法封装起来。让这些算法可以互相替换。客户端代码(调用者)可以动态选择使用哪种算法。创建一个// 支付方法,接收金额策略模式的核心是定义一个接口,让不同的算法(策略)实现它,上下文类动态调用这些策略。适合场景:当你有多种算法或行为,且需要在运行时切换时使用。关键点。

weixin_44547668的博客 597

Windows环境下实现设计模式——策略模式(JAVA版)

Windows环境下实现设计模式——策略模式(JAVA版)

荔园微风的博客 435
上一篇: Elasticsearch从小牛到老牛(3)---花式增删改
下一篇: JAVA面试/笔试题之二叉树的遍历
Geek_Alex
博客等级 码龄9年 14粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值