设计模式-策略模式 Java

Java设计模式之策略模式示例详解 现实生活中我们到商场买东西的时候,卖场往往根据不同的客户制定不同的报价策略,比如针对新客户不打折扣,针对老客户打9折,针对VIP客户打8折...现在我们要做一个报价管理的模块,简要点就是要针对不同的客户,提供不同的折扣报价。如果是有你来做,你会怎么做?if ("新客户".equals(customType)) {System.out.println("抱歉!新客户没有折扣!");}else if ("老客户".equals(customType)) { 阅读详情

模式概述

策略模式是一种行为型设计模式,它通过定义一系列可互换的算法,并将每个算法封装成独立类,使客户端能够根据需要动态切换算法

简单代码示例

// 1. 抽象策略接口
interface PaymentStrategy {
    void pay(int amount);
}

// 2. 具体策略实现
class CreditCardPayment implements PaymentStrategy {
    @Override
    public void pay(int amount) {
        System.out.println("信用卡支付: " + amount + "元");
    }
}

class AlipayPayment implements PaymentStrategy {
    @Override
    public void pay(int amount) {
        System.out.println("支付宝支付: " + amount + "元");
    }
}

// 3. 环境类(持有策略引用)
class PaymentContext {
    private PaymentStrategy strategy;

    public void setStrategy(PaymentStrategy strategy) {
        this.strategy = strategy;
    }

    public void executePayment(int amount) {
        strategy.pay(amount);
    }
}

// 客户端调用
public class Client {
    public static void main(String[] args) {
        PaymentContext context = new PaymentContext();
        
        // 动态切换策略
        context.setStrategy(new CreditCardPayment());
        context.executePayment(100);  // 输出:信用卡支付: 100元
        
        context.setStrategy(new AlipayPayment());
        context.executePayment(200); // 输出:支付宝支付: 200元
    }
}

技术细节

1.模式组成

组件职责说明
抽象策略类定义算法的公共接口,声明策略方法
具体策略类实现抽象策略接口,提供具体算法实现
环境类持有策略对象的引用,通过委托调用具体算法

2.优缺点

优点:

  • 符合开闭原则,新增策略无需修改已有代码
  • 避免多重条件判断(如if-else分支)
  • 算法复用,相同策略可被不同上下文使用

缺点:

  • 会产生大量小对象,增加系统复杂性
  • 多层装饰时调试困难

模式应用

事务管理(PlatformTransactionManager)

策略接口:

  • PlatformTransactionManager

具体策略:

  • DataSourceTransactionManager(JDBC事务)

  • JpaTransactionManager(JPA事务)

  • JtaTransactionManager(分布式事务)

【Java设计模式】Java设计模式之(十五)策略模式(Strategy Pattern) 本文目录 一、策略模式介绍 1.1 含义 1.2 适用场景 1.3 主要解决 1.4 应用实例 1.5 优缺点 二、策略模式实现 2.1 类图 2.2 代码实现 第一个案例:策略模式代码实现 第二个案例:策略模式代码实现 三、源码分析 这种类型的设计模式属于行为型模式。 一、策略模式介绍 1.1 含义 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为 阅读详情

相关推荐

小故事说JAVA设计模式-策略模式【Strategy Pattern】

# 弄清概念 策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化 # 策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。下面就以一个示意性的实现讲解策略模式实例的结构: 这个模式

平凡的世界 278

Java设计模式--策略模式【Strategy Pattern】

策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。    策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封

CoderLover 541

易灵思FPGA实战:T35F324的PLL硬核配置全流程(附避坑指南)

本文详细解析了易灵思T35F324 FPGA中硬核PLL的配置全流程与核心避坑点。内容涵盖从架构理解、Interface Designer参数设置、VCO范围校验,到时钟网络冲突分析与动态重配置等实战环节,重点解决了引脚分配、资源约束和常见报错问题,为工程师提供了一套清晰可靠的配置指南。

u9v0w的博客 215

Java设计模式之策略模式(Strategy Pattern)

总结: 策略模式是一种优雅且灵活的设计模式,它允许在运行时选择不同的算法实现方式,实现算法的定义与使用分离。策略模式在Java中的应用非常广泛,它提供了一种优雅的方式来实现算法的选择和组合。例如,在一个电商平台中,根据用户的会员等级,我们可能会对购物车的折扣进行不同的计算。假设我们正在开发一个电商平台,根据不同的用户等级提供不同的折扣策略。在上面的示例中,我们成功地使用了策略模式,根据不同的用户等级提供不同的折扣策略。)并不关心具体的折扣实现,而是通过策略接口与具体的策略类进行交互,实现了算法的动态切换。

weixin_38682092的博客 312

告别信号干扰!用Altium Designer 19搞定4层/6层PCB叠层设计的保姆级流程

本文详细介绍了如何使用Altium Designer 19进行4层/6层PCB叠层设计,解决信号干扰问题。通过实际案例和系统方法论,涵盖高速数字电路、混合信号系统等典型场景的设计优化,帮助硬件工程师和学生掌握电磁兼容(EMC)与信号完整性(SI)的核心技术。

weixin_27076351的博客 203

基于深度强化学习的无地图移动机器人导航:让机器人在未知环境中智能前行

虽然仍然面临sim-to-real差距、安全性保证等挑战,但随着算法的不断改进和计算能力的提升,基于DRL的无地图导航技术将在服务机器人、工业自动化、太空探索等领域发挥越来越重要的作用,为人类生产和生活带来更大便利和价值。对于复杂环境下的动态目标导航问题,研究人员提出了多智能体协同控制算法(如Teamwork-Net算法),通过多个智能体分别控制机器人的运动速度与运动方向,协同实现更高效、更稳定的导航性能。深度强化学习结合了深度学习的感知能力和强化学习的决策能力,非常适合解决无地图导航问题。

weixin_45131592的博客 902

Java设计模式——策略模式【Strategy Pattern】

Java设计模式、策略模式

scorpio的博客 685

Couldn‘t agree a key exchange algorithm(available:curve25519-sha256,curve25519-sha256@libssh.org解决方案

本文主要介绍了Couldn’t agree a key exchange algorithm(available:curve25519-sha256,curve25519-sha256@libssh.org解决方案,希望能对使用winscp的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 方案一 2.2 方案二

weixin_43178406的博客 4万+

Java 设计模式之策略模式 (Strategy Pattern) 详解

策略模式通过将算法的选择和实现分离,使得算法可以独立变化,客户端代码可以更简洁和灵活。策略模式(Strategy Pattern)是一种行为型设计模式,旨在定义一系列算法,将每个算法封装起来,并使它们可以互相替换,从而使得算法的变化不会影响使用算法的客户端。策略模式的主要结构包括策略接口、具体策略类和上下文类,通过将算法的选择与使用分离,实现了代码的可维护性和灵活性。通过策略模式和工厂模式的结合,可以实现一个灵活、可扩展且易于维护的支付系统。通过策略模式,可以根据用户选择的支付方式动态切换支付策略。

微笑听雨 3574

交换机四种光互联技术:OIO、OBO、NPO与CPO

在过去几十年里,数据中心交换机主要依赖电信号通过铜线进行数据传输。然而,随着数据传输速率从100Gbps向400Gbps、800Gbps甚至1.6Tbps迈进,传统电互联(Electrical Input & Output, EIO)面临三大瓶颈:信号衰减、功耗激增和空间限制。例如,高速信号在长距离铜线传输中会产生严重的信号失真,迫使设计者加入数字信号处理器(DSP)来补偿信号衰减,这进一步推高了功耗和成本。此外,传统可插拔光模块的体积较大,限制了端口密度,难以满足现代数据中心对高带宽密度的需求。

网络技术联盟站 3127

从0到1用OpenClaw打造酒店收益管理系统:数据整合→AI策略迭代全链路落地实战

本文基于三亚某连锁海景酒店真实项目落地经验编写,系统上线3个月,酒店平均入住率从62%提升至80%,RevPAR(平均可售房收入)提升26%,淡季空置率降低46%,完全覆盖中小酒店全场景收益管理需求。本文配套OpenClaw全量Skill代码、工作流配置文件,可直接复用落地。

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

Java设计模式-策略模式(Strategy Pattern)

一、策略模式定义策略模式定义了一系列的算法,并分别封装起来,使它们可相互替换。此模式使得算法可独立于使用它的客户而变化。策略模式的好处是可以动态设定客户的行为。二、策略模式要解决的问题对于继承自同一个父类的许多具体子类,为了提高代码的复用性,首先必然要抽取所有子类都具有的方法,将其写入父类,通过继承的方式使用这些方法。对于某一个子类独有的方法,则在该子类中单独实现,不涉及代码的复用。而重点在于,如何

一路洒满阳光! 543

C#上位机开发实战全流程:从需求到落地,避坑指南+完整代码

作为一名做了5年工业自动化上位机开发的程序员,我踩过的坑比写过的代码还多——从最初串口通信粘包导致数据错乱,到可视化图表卡顿卡死,再到现场异常崩溃无日志可查,每一次踩坑都是一次血泪教训。今天这篇文章,我会把C#上位机开发的全流程拆解开,从需求分析到通信模块、数据可视化,再到异常处理,每个环节都结合工业实际场景,分享真实项目中能用的方案、完整代码和避坑技巧。不管你是刚入门的新手,还是想优化现有项目的老司机,相信都能有所收获。很多新手做上位机开发,一上来就闷头写代码,最后发现做出来的东西不符合现场需求——比如客

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

java策略设计模式输出字母_Java 设计模式-策略模式(Strategy Pattern)

策略模式(Strategy Pattern)属于对象行为模式。其作用是针对一组算法,将每个算法封装到具有共同接口的独立类中,从而使它们可以相互替换。策略模式的意图是将可以互换的方法封装在各自的对立类中并且让每个方法都实现一个共同的接口。策略模式(Strategy pattern)中涉及到三个角色:环境(Context)角色:持有一个Strategy类的引用的类抽象策略(Abstract Strat...

weixin_28784019的博客 619

YOLOv8工业缺陷检测实战:攻克光照不均难题,精度从70%到92%的全流程优化(附缺陷数据集)

YOLOv8在工业缺陷检测中突破光照不均难题,核心是“硬件控光+数据造景+模型聚焦+训练攻坚硬件控光:从源头减少光照变异,降低算法难度;数据造景:用CLAHE、合成样本让模型“见过足够多的光照情况”;模型聚焦:用ECA注意力和Focal-EIoU损失,让模型盯住缺陷而非光照;训练攻坚:分阶段+难例挖掘,强迫模型学习薄弱点。这套方案已在汽车轴承、手机外壳、PCB板3类产线落地,平均精度提升20%+,漏检率控制在0.08%以内,完全满足工业级要求。

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java设计模式详解:策略模式(Strategy Pattern)

策略模式是一种灵活且强大的设计模式,能够帮助开发者将算法与业务逻辑解耦,实现动态切换行为。适用场景:需要动态切换算法、避免复杂条件语句、扩展性强的场景。优点:算法独立、可替换、符合开闭原则。缺点:类数量增加、客户端需了解所有策略类。通过合理使用策略模式,可以显著提升代码的灵活性和可维护性。在实际开发中,策略模式常与工厂模式、代理模式等结合使用,以进一步增强系统的扩展性和可配置性。掌握策略模式,将为你的Java开发之路增添一把利器!

m0_73941339的博客 3786

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java设计模式教程-策略模式(Strategy Pattern)

相关源码 1 简介 1.1 定义 也叫做政策模式(Policy Pattern) wiki 对象有某个行为,但是在不同的场景中,该行为有不同的实现算法.。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法. 定义 Define a family of algorithms,encapsulate each one,and make them interchangeable. 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。 常见 if/els

JavaEdge全是干货的技术号 1324

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Java设计模式 十六 策略模式 (Strategy Pattern)

策略模式通过将算法封装在独立的策略类中,使得算法的切换变得更加灵活。它避免了在代码中出现大量的条件判断,使得系统更加符合开闭原则,便于扩展和维护。尤其在面对需要多种行为或算法的场景下,策略模式提供了一种非常有效的解决方案。

空 707

Java设计模式——策略模式(Strategy Pattern)

是

奔跑8蜗牛 415

Java 设计模式-策略模式(Strategy Pattern)

策略模式(Strategy Pattern)属于对象行为模式。其作用是针对一组算法,将每个算法封装到具有共同接口的独立类中,从而使它们可以相互替换。 策略模式的意图是将可以互换的方法封装在各自的对立类中并且让每个方法都实现一个共同的接口。 策略模式(Strategy pattern)中涉及到三个角色: 环境(Context)角色:持有一个St......

技术分享 233

java strategy模式,Java设计模式——策略模式(Strategy pattern)

策略模式,在阿里巴巴开发手册中有提到过,可以用来减少if-else嵌套,是一个常用的设计模式。策略模式结构如下图,一个上下文Context只有一个抽象的策略Strategy,可以调用该策略的strategyInterface()执行具体的策略方法。就比如平常用手机支付,我的手机持有系统级别的抽象的支付方式,然后支付宝和微信支付来具体实现我的支付接口,用户需要付款时,弹窗让用户选择使用哪种方式付款,...

weixin_39765625的博客 301

JAVA设计模式之 策略模式【Strategy Pattern】

JAVA设计模式、都是前辈们积累下来的经典的设计思想、可能我们在平时的代码中都没有经常用到、我曾经在读书的时候有过一段时间每天去学习一种设计模式、但是在后来的工作中、通常都是在公司自主的框架中编写一些业务处理代码、最近在学习Android的过程中、发现Android里面应用了大量的设计模式、于是我便翻出以前看过的一本很经典设计模式书籍出来、把里面每种设计模式、重新代码写一遍、一方面加深自己的设计思

小吕丶Code阶区 1970

Java设计模式-策略模式

最近学习到设计模式,现总结个人学习策略模式内容【结果一样关注过程,即注重的是行为】。 上一篇:Java设计模式-适配器模式 文章目录定义优缺点优点缺点实现代码测试 定义 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。定义好各种不同行为【策略不同】,但是其最求目的相对稳定 优缺点 优点 扩展性好,不用添加策略对原有系统无影响。 策略可以自由选择。...

cc_百川 402

Java常用设计模式--策略模式(Strategy Pattern)

简介 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。 策略模式角色 环境(Context)角色:持有一个Strategy的引用,最终给客户端调用。 抽象策略(Stra...

gang_luo的博客 374

java设计模式---策略模式(strategy pattern)

java设计模式—策略模式(strategy pattern) 1. 概述 在策略模式中,我们可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法,在这里,每一个封装算法的类我们都可以称之为一种策略(Strategy),为了保证这些策略在使用时具有一致性,一般会提供一个抽象的策略类来做规则的定义,而每种算法则对应于一个具体策略类。 策略模式的主要目的是将算法的定义与使用分开,也就...

渔潭的博客 329
上一篇: 设计模式-装饰模式 Java
下一篇: MySQL深分页性能优化实战:大数据量情况下如何进行优化
刘火锅
博客等级 码龄7年 121粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值