【Java中23种面试常考的设计模式之策略模式(Strategy)---行为型模式】

Java策略模式实战:从原理到电商促销应用 策略模式是面向对象编程中常用的行为设计模式,其核心思想是将算法封装成独立的策略类,使它们可以相互替换。这种模式通过接口抽象实现了运行时动态切换行为的能力,有效解决了复杂条件判断导致的代码维护难题。在Java开发中,策略模式广泛应用于电商促销、支付系统、数据解析等场景,特别是与Spring框架结合后能实现更优雅的企业级解决方案。通过函数式接口和Lambda表达式,Java 8为策略模式带来了更简洁的实现方式。掌握策略模式不仅能提升代码的可扩展性,更是理解开闭原则、依赖倒置等设计思想的重要实践路径。 阅读详情

【Java中23种面试常考的设计模式之策略模式(Strategy)—行为型模式】

知识回顾:

之前我们讲过的设计模式在这里呦:
【面试最常见的设计模式之单例模式】
【面试最常见的设计模式之工厂模式】
【Java中23种面试常考的设计模式之备忘录模式(Memento)—行为型模式】
【Java中23种面试常考的设计模式之观察者模式(Observer)—行为型模式】
【Java中23种面试常考的设计模式之模板模式(Template)—行为型模式】
【Java中23种面试常考的设计模式之状态模式(State)—行为型模式】
接下来我们要进行学习的是:【Java中23种面试常考的设计模式之策略模式(Strategy)—行为型模式】。

策略模式

策略模式核心思想是:在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

策略模式VS状态模式

无论是从代码实现上,还是类图,策略模式和状态模式几乎都一样,但他们本质上是有所不同的,策略模式是完成一件事有不同实现方式,不同的行为;但是状态模式是某一个对象对应的不同状态,总体还是完成一件事,这件事中对应着不同的状态,你可以简单的把它理解为它只有一种策略,这种策略下对应着多种状态。

解决的问题

有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。

应用策略模式的场景

做同一件事情的不同的行为。

生活中关于策略模式应用的场景

  1. 旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。
  2. 会员、普通用户、超级会员等等对应不同的打折策略。
  3. 等等。。。等等。。。。

生产开发中常用的使用场景

  1. Spring框架中,Resource接口,资源访问策略
  2. 解决一道算法题目的不同策略。
  3. 等等。。。。。等等。。。。

策略模式优点与缺点

优点
  1. 算法可以自由切换。
  2. 避免使用多重条件判断。
  3. 扩展性良好。
缺点
  1. 策略类会越来越多,后期不利于管理与维护。
  2. 所有策略类都需要对外暴露,不够安全。

核心角色

定义规则接口的Strategy,实现规则接口策略的具体的类,以及使用某种策略的类Context。

UML类图

在这里插入图片描述

实现代码

我们举这样一个栗子:一场算法竞赛中,有一道题目非常有意思,有多种解法:假设:解法1:暴力法 解法2:双指针 解法3:线段树

接口策略类
package com.strategy;

interface Strategy {
   void solveProblemDifferentsMethods();
}

具体实现类1
package com.strategy;

class BFStrategy implements Strategy{

	@Override
	public void solveProblemDifferentsMethods() {
		// TODO Auto-generated method stub
		System.out.println("这道题目我使用暴力解法解决啦。。。。BFStrategy");
	}
    
}

具体实现策略类2
package com.strategy;

class TwoPonterStrategy implements Strategy{

	@Override
	public void solveProblemDifferentsMethods() {
		// TODO Auto-generated method stub
		System.out.println("这道题目我使用双指针解法解决啦。。。。TwoPonterStrategy");
	}
    
}
具体实现策略类3
package com.strategy;

class SegmentTreeStrategy implements Strategy{

	@Override
	public void solveProblemDifferentsMethods() {
		// TODO Auto-generated method stub
		System.out.println("这道题目我使用线段树解法解决啦。。。。SegmentTreeStrategy");
	}
    
}

设置使用策略的类
package com.strategy;

class Context{

    private Strategy strategy;

    public Context(Strategy strategy){
      this.strategy = strategy;
    }

   public void exec(){
        strategy.solveProblemDifferentsMethods();
   }

}
测试代码
package com.strategy;

public class Main {

    public static void main(String[] args){
        Strategy strategy=new BFStrategy();
        Context context=new Context(strategy);
        context.exec();
        System.out.println("方案一暴力法成功解决。。。。。");
        strategy=new TwoPonterStrategy();
        context=new Context(strategy);
        context.exec();
        System.out.println("方案二双指针法成功解决。。。。。");
        strategy=new SegmentTreeStrategy();
        context=new Context(strategy);
        context.exec();
        System.out.println("方案一线段树方法成功解决。。。。。");
    }
}



运行结果展示:

在这里插入图片描述

好了,到这里【Java中23种面试常考的设计模式之策略模式(Strategy)—行为型模式】就结束了,23种设计模式持续更新汇总中。

JAVA的22种设计模式 java设计模式集大成--易理解!慢慢积累追加笔记。 阅读详情

相关推荐

RM机器人麦轮底盘实战:从零搭建到PID调参全记录(附避坑指南)

本文详细记录了RM机器人麦轮底盘从零搭建到PID调参的全过程,涵盖硬件组装、开发环境搭建、底盘解算和PID调参等关键步骤,并附有实用的避坑指南。特别针对麦轮控制、底盘解算和电机调试等核心问题提供了专业解决方案,帮助开发者快速提升机器人性能。

bush的博客 372

java设计模式之策略模式

java设计模式之策略模式

m0_47944994的博客 1986

STC15单片机双串口通信实战:串口2配置与多设备交互

本文详细介绍了STC15单片机双串口通信的实战配置,重点解析串口2的硬件连接、寄存器设置及多设备交互实现。通过实际项目案例和完整代码示例,帮助开发者快速掌握STC15串口2的配置技巧,解决常见通信问题,提升嵌入式系统开发效率。

weixin_29174013的博客 255

常见面试题之设计模式--策略模式

该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。策略模式的主要角色如下:抽象策略(Strategy)类:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现或行为。环境(Context)类:持有一个策略类的引

时代各有不同,青春一脉相承。 598

CKS-CN考试之路----03

这题不需要去生成image和生成deployment所以只需要去检测对应的值即可。编辑/cks/docker/Dockerfile,修改最后第二行的值。编辑/cks/docker/deployment.yaml。

Q先生 824

C#上位机+国产PLC+AI:构建自主可控的智能生产线解决方案

全栈国产化智能产线方案并非遥不可及,基于成熟的国产硬件、丰富的.NET生态、快速发展的国产大模型,完全可以搭建出稳定可靠且具备智能能力的生产系统。落地建议采用三步走策略:基础国产化阶段:替换PLC与上位机,实现基础监控与控制功能,解决卡脖子问题,快速验证国产化方案稳定性数据沉淀阶段:完善数据采集与存储,建立设备台账、故障库、工艺库,积累高质量领域数据智能升级阶段:引入国产大模型与知识库,落地故障诊断、工艺优化、预测性维护等智能应用,持续提升产线效率。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 520

【Java】和面试官谈策略模式

本篇文章将通过策略模式的概念和优缺点以及几个完整的示例来讲解如何在工作和学习当中将策略模式融入的你的业务当中

知道的越多 不知道的就越多 1743

8.时间序列预测

目标:使用历史数据预测未来的销售额。通过以上步骤,可以在Excel中有效进行预测分析,帮助做出更准确的决策通过考虑不同时期数据的影响,可以显著提高预测的准确性。结合多种方法和模型,可以灵活应对复杂的市场环境和变化。

学习,输出==》再学习再输出 891

面试官:如何更优雅地实现策略模式?

发表于湖南收录于合集#Java246个上方蓝色“程序员追风”,选择“设为星标”回复“”获取整理好的原文:cnblogs.com/hyry/p/16068762.html。

竹林幽深 248

飞书接入OpenClaw:从零到一的保姆级图文教程

本文主要介绍了飞书接入OpenClaw:从零到一的保姆级图文教程,希望能对学习使用OpenClaw 的同学们有所帮助。 文章目录 1. 背景 2. 解决方案 2.1 步骤一:安装插件 2.2 步骤二:创建机器人应用 2.3 步骤三:测试 3. 注意事项

weixin_43178406的博客 13万+

Microsoft Forms功能深度解析:企业数据收集与协作的智能利器

Microsoft Forms是微软365生态中的在线表单工具,支持问卷调查、测验和投票创建,具备拖拽式界面、多题型设计和实时数据分析功能。其核心价值在于易用性、跨平台兼容性以及与Teams、SharePoint等微软服务的深度集成,满足GDPR/HIPAA等合规要求。提供表单创建、权限管理、自动化流程(通过Power Automate)和审计日志等功能,适用于金融、医疗、教育等多行业场景。虽然存在逻辑分支有限等约束,但通过案例证明能显著提升数据收集效率(达70-85%)。使用时需注意许可证配置(Busin

xueyunshengling的博客 9125

关于Java策略模式的面试题及其答案

策略模式是一种行为设计模式,它允许你在运行时选择算法或行为。通过定义一系列算法,将它们封装起来,并使它们可以互相替换,从而让算法的变化独立于使用算法的客户。

HappyAcmen 1135

【网络与爬虫 53】Scrapy-Prometheus实战指南:打造企业级爬虫监控体系的终极解决方案

本文深入探讨Scrapy-Prometheus集成技术,通过费曼学习法从监控痛点出发,详细讲解如何在Scrapy爬虫中集成Prometheus指标收集系统。涵盖从基础配置到企业级监控体系的完整实战指南,帮助开发者构建可观测性强、可维护性高的分布式爬虫监控平台,实现爬虫性能的精准监控和智能告警。

熵数实验室 1584

23种设计模式-19策略模式(Strategy Pattern)

策略模式是在开发中最常见的设计模式之一,本文介绍了策略的基本原理及使用场景,以及基于 java 代码的普通实现和基于Spring 的实现案例。

不开心就吃辣 1872

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java 23 种设计模式:从踩坑到精通 —— 开篇及系列介绍

摘要:本文是《Java 23种设计模式:从踩坑到精通》系列的总入口与导航页。文章梳理了设计模式的起源与三大分类,结合SOLID六大原则,详解为什么2026年设计模式依然重要。提供25篇完整目录、面试高频Top10速记、场景速查索引、易混模式对比表及分级阅读路线,可作为长期收藏的设计模式学习手册。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 3581

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java 23 种设计模式:从踩坑到精通 | 策略模式 —— 算法族的封装与切换,告别 if-else

摘要:当同一个操作有多种算法实现,且需要根据场景灵活切换时,if-else 或 switch 会将所有算法混杂在一起,导致逻辑臃肿、扩展困难。策略模式将每个算法封装为独立的策略类,使它们可以相互替换,且算法的变化不影响使用算法的客户端。本文从电商促销策略的场景出发,完整讲解策略模式的原理、UML、代码实现、与状态模式的区别,并结合电子面单多平台架构实战、JDK 排序比较器、Spring 资源加载等应用,帮你掌握“算法对象化”的设计精髓。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 1743

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

23种设计模式之策略模式

做编程的时候,如果讲每一个类加上各种各样的功能就意味着,无论任何需求要来,你都需要更改这个类,这样会让维护非常麻烦,复用不可能,也缺乏灵活性。如果一个类承担的职责过多,就等于把这些职责耦合起来,一个职责变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭到很多意想不到的破坏。使用多个专门的接口,而不使用单一的总接口。即客户端不应该依赖于那些它不需要的接口。接口的设计粒度越小,系统越灵活,但是灵活的同时结构复杂性提高,开发难度也会变大,维护性降低。

2401_83641360的博客 879

《JAVA面经实录》- 23种设计模式面试题(二)

《JAVA设计模式面试精要》摘要:本文系统解析23种设计模式,分为创建型(单例、工厂等)、结构型(适配器、代理等)和行为型(观察者、策略等)三大类。重点阐述六大设计原则(SOLID+迪米特法则),每个模式均包含定义、原则应用、优缺点分析及典型业务场景(如电商支付、审批系统等),并附Java代码实现。特别强调模式选择需结合实际需求,避免过度设计,同时提供清晰的模式对比表格,帮助开发者快速掌握各模式核心特征与应用场景。

专注 Java 后端开发,分享基础语法、JVM、并发、Spring 全家桶、微服务、分布式、性能优化等实战干货。坚持输出高质量技术笔记,用简单语言讲清复杂原理,助力每一位 Java 开发者稳步进阶。 894

23个设计模式一文搞懂

本笔记涵盖 23 种经典设计模式,按创建型、结构型、行为型三大类整理。每个模式配有生活类比、核心思想、结构图解、实现要点、真实应用案例、适用场景、优缺点分析及常见面试题。

weixin_72753562的博客 802

《我要进大厂》设计模式之一:策略模式

*** 策略定义*/

伍六七的博客 567

Java设计模式面试全攻略:理论与实战解析

设计模式是软件开发中解决常见问题的经典方案,通过封装最佳实践提升代码的可维护性和扩展性。其核心原理基于面向对象设计原则,如SOLID原则,通过合理的对象组合与职责分配实现灵活架构。在Java生态中,设计模式广泛应用于框架开发(如Spring的Bean管理采用工厂模式)和业务系统实现(如支付系统的策略模式)。典型应用场景包括对象创建(单例模式处理全局缓存)、接口适配(第三方登录集成)以及行为封装(订单状态观察者)。掌握设计模式不仅能优化代码结构,更是应对技术面试的关键,特别是在高并发(线程安全单例)和复杂系统

weixin_30443075的博客 396

《JAVA面经实录》- SpringBoot 电商项目23种设计模式(三)

最终版·生产级 SpringBoot 电商项目: 已补全所有漏洞 + 23 种设计模式真实串联 + Spring 生态融合 + 可简历可面试可上线

专注 Java 后端开发,分享基础语法、JVM、并发、Spring 全家桶、微服务、分布式、性能优化等实战干货。坚持输出高质量技术笔记,用简单语言讲清复杂原理,助力每一位 Java 开发者稳步进阶。 556

设计模式面试高频题:单例/工厂/代理/观察者模式在框架中的实际应用

本文介绍了三种常用的设计模式及其应用场景。工厂方法模式通过解耦对象创建过程,包含简单工厂、工厂方法和抽象工厂三种形式,适用于咖啡店点餐等场景。策略模式将算法封装为独立策略类,便于灵活替换,适用于登录方式选择、促销活动等业务。责任链模式通过链式处理请求,适用于订单处理、审批流程等场景。这三种模式都能有效减少代码耦合,提高系统扩展性,符合开闭原则。在实际开发中,合理运用这些模式可以优化代码结构,提升项目可维护性。

xwhxy的博客 464

GoF 23种设计模式:核心原理与实战应用详解

设计模式是软件工程中解决特定问题的可重用方案模板,其核心原理在于通过标准化的设计思路提升代码的可维护性和扩展性。从技术价值看,设计模式能够有效解耦系统组件,避免常见的紧耦合、低内聚等设计缺陷,同时为团队协作提供统一的术语体系。在实际应用场景中,创建型模式如单例模式和工厂方法模式专注于对象的创建机制,结构型模式如适配器模式和装饰器模式处理类或对象的组合关系,而行为型模式如观察者模式和策略模式则关注对象间的交互算法。本文基于GoF提出的23种经典设计模式,结合单例模式和工厂方法模式等热词,通过具体的代码示例深入

weixin_33924770的博客 354

设计模式与原则实战:提升代码质量与面试表现

设计模式是软件工程中解决常见问题的可复用方案,其核心价值在于提升代码的可维护性和扩展性。SOLID原则作为设计模式的指导思想,包括单一职责、开闭原则等,帮助开发者构建高内聚低耦合的系统。在实际工程中,合理运用建造者模式处理复杂对象构造,或通过观察者模式实现事件驱动,能显著提升开发效率。特别是在微服务架构下,传统模式如服务发现和熔断器有了新的演进。理解这些基础概念并通过电商系统重构等场景实践,是掌握设计模式的关键。本文结合Singleton和Factory等热词,展示如何避免模式滥用,以及通过代码坏味道识别优

weixin_34347651的博客 388

Java设计模式核心解析与实战应用

设计模式是面向对象编程中解决特定问题的经典方案,其核心价值在于提升代码的可维护性和扩展性。创建型模式通过工厂方法、单例等模式管理对象创建;结构型模式如装饰器、代理模式关注类与对象的组合方式;行为型模式则处理对象间的交互逻辑。在Java生态中,Spring框架的BeanFactory运用工厂模式,MyBatis通过责任链模式实现插件机制。掌握策略模式与Lambda表达式的结合、观察者模式的现代化实现等技巧,能显著提升电商系统、分布式架构等场景下的开发效率。合理运用设计模式可避免过度设计,是每个Java工程师必

weixin_30437847的博客 326
上一篇: 【Java中23种面试常考的设计模式之状态模式(State)---行为型模式】
下一篇: 【Leetcode每日一题1768:交替合并字符串~暴力模拟+双指针】
硕风和炜
硕风和炜 优质创作者: Java技术领域 优质创作者: Java技术领域
博客等级 码龄7年 2万+粉丝 1024原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值