行为型——策略模式(Strategy)day22

ROS 2 DDS-Security实战:从sros2密钥配置到工业级安全通信 DDS-Security是ROS 2实现通信加密、身份认证与访问控制的核心安全机制,其原理基于X.509证书体系与策略驱动的中间件层强制执行,区别于应用层TLS或自研加解密方案。该机制通过sros2工具链将PKI管理、enclave路径映射、governance策略生成等复杂流程标准化,显著降低工业机器人、AGV调度、医疗设备等对实时性与可信性有严苛要求场景的落地门槛。技术价值体现在进程隔离加密(私钥不驻留应用内存)、QoS兼容的安全降级防护,以及跨语言/跨平台的中间件抽象能力。本文聚焦真实产线环境中的可验 阅读详情

策略模式基本介绍

  1. 策略模式(Strategy Patterm) 中,定义算法族(策略组),分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户
  2. 这算法体现了几个设计原则,第一、把变化的代码从不变的代码中分离出来;第二、针对接口编程而不是具体类(定义了策略接口) ;第三、多用组合/聚合,少用继承(客户通过组合方式使用策略) .

策略模式的原理类图

在这里插入图片描述
说明:从上图可以看到,客户context有成员变量strategy或者其他的策略接口,至于需要使用到哪个策略,我们可以在构造器中指定

案例

  1. 实例要求
    1、有各种鸭子(比如野鸭、北京鸭、水鸭等, 鸭子有各种行为,比如叫、飞行等)
    2、显示鸭子的信息

  2. 类图
    策略模式:分别封装行为接口,实现算法族,超类里放行为接口对象,在子类里具体设定行为对象。原则就是:分离变化部分,封装接口,基于接口编程各种功能。此模式让行为的变化独立于算法的使用者
    在这里插入图片描述

package com.xhl.Strategy;

public interface QuackBehavior {
	void quack();
}
package com.xhl.Strategy;

public interface FlyBehavior {
	
	void fly(); 
}
package com.xhl.Strategy;

public class BadFlyBehavior implements FlyBehavior{

	@Override
	public void fly() {
		// TODO Auto-generated method stub
		System.out.println("飞行技术一般");
	}

}

package com.xhl.Strategy;

public class GoodFlyBehavior implements FlyBehavior{

	@Override
	public void fly() {
		// TODO Auto-generated method stub
		System.out.println("飞行技术很好");
	}

}

package com.xhl.Strategy;

public class NoFlyBehavior implements FlyBehavior{

	@Override
	public void fly() {
		// TODO Auto-generated method stub
		System.out.println("无法飞行");
	}

}

package com.xhl.Strategy;

public abstract class Duck {
	FlyBehavior flyBehavior;
	QuackBehavior quackBehavior;//其他属性
	
	public abstract void display();//显示鸭子信息
	
	public void quack() {
		System.out.println("鸭子嘎嘎嘎叫。。。。。。。。。。。。。。。");
	}
	
	public void swim() {
		System.out.println("鸭子会游泳=====================");
	}
	
	public void fly() {
		if(flyBehavior !=null ) {
			flyBehavior.fly();
		}
	}

	public void setFlyBehavior(FlyBehavior flyBehavior) {
		this.flyBehavior = flyBehavior;
	}

	public void setQuackBehavior(QuackBehavior quackBehavior) {
		this.quackBehavior = quackBehavior;
	}
	
}

package com.xhl.Strategy;

public class ToyDuck extends Duck{

	public ToyDuck() {
		flyBehavior = new NoFlyBehavior();
	}
	@Override
	public void display() {
		// TODO Auto-generated method stub
		System.out.println("-----玩具鸭----");
	}

	//为了方便减少类的种类,这里直接写了quack方法,可以在QuackBehavior类下面创建属性族
	public void quack() {
		System.out.println("玩具鸭不能叫");
	}
	
	public void swim() {
		System.out.println("玩具鸭不会游泳");
	}
}

package com.xhl.Strategy;

public class WildDuck extends Duck{

	public WildDuck() {
		flyBehavior = new GoodFlyBehavior();
	}
	@Override
	public void display() {
		// TODO Auto-generated method stub
		System.out.println("-----野鸭----");
	}

}
package com.xhl.Strategy;

public class PekingDuck extends Duck{

	public PekingDuck() {
		flyBehavior = new BadFlyBehavior();
	}
	@Override
	public void display() {
		// TODO Auto-generated method stub
		System.out.println("-----北京鸭----");
	}

}
package com.xhl.Strategy;

public class StrategyDemo {

	public static void main(String[] args) {
		
		WildDuck wildDuck = new WildDuck();
		wildDuck.fly();
		wildDuck.quack();
		
		ToyDuck toyDuck = new ToyDuck();
		toyDuck.fly();
		toyDuck.quack();
		
		PekingDuck pekingDuck = new PekingDuck();
		pekingDuck.fly();
		pekingDuck.quack();
		
		//动态改变某个对象的行为,北京鸭不能飞
		pekingDuck.setFlyBehavior(new NoFlyBehavior());
		System.out.println();
		pekingDuck.fly();
	}

}

在这里插入图片描述

总结

  1. 策略模式的关键是:分析项目中变化部分与不变部分
  2. 策略模式的核心思想是:多用组合/聚合少用继承;用行为类组合,而不是行为的继承。更有弹性
  3. 体现了“对修改关闭,对扩展开放”原则,客户端增加行为不用修改原有代码,只要添加一种策略(或者行为)即可,避免了使用多重转移语句(if.else if.else)
  4. 提供了可以替换继承关系的办法:策略模式将算法封装在独立的Strategy类中使得你可以独立于其Context改变它,使它易于切换、易于理解、易于扩展
  5. 需要注意的是: 每添加一个策略就要增加一个类,当策略过多是会导致类数目庞大
MuleSoft AI编排:企业级LLM服务治理与动态调度实战 AI编排(AI Orchestration)是企业在生产环境中规模化应用大语言模型(LLMs)的核心能力,其本质并非简单API调用,而是对多源异构AI服务的统一治理、上下文感知路由、SLA驱动调度与可信交付。它融合了API管理、服务网格、策略引擎与可观测性等关键技术原理,解决数据合规、成本可控、服务韧性与审计溯源四大硬约束。在金融、制造等强监管行业,MuleSoft凭借其成熟的API治理层、可编程运行时与DataWeave数据集成能力,成为构建LLM微服务化、版本化、计费化与熔断化能力的事实中枢。本文聚焦真 阅读详情

相关推荐

【信息科学与工程学】【数据中心】【智算中心】第二十六篇 计费系统篇02

在云计算与电信网络深度融合的背景下,云服务商(如阿里云、腾讯云、UCloud等)与电信运营商(中国电信、移动、联通)通过创新联合计费模式,显著降低了企业用云成本。这些模式主要围绕展开。

weixin_49199313的博客 1270

设计模式之策略模式

最近在看一本叫《Head First 设计模式》的书,看完一种设计模式,就来这里写一下学习心得,顺便与大家分享一下。 首先,我们想要构建一个类构建一个很灵活的Duck(鸭子)类,这只鸭子可以不能飞,也可以用翅膀飞,也可以用火箭助推器飞,并且详细的飞属性能够在运行时更改,并且更改不需要改变这个Duck类本身的代码。 一、创建FlyBehavior接口 这时候,我们可以把Duck类中的fly()

LiQiyao的博客 414

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01

当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。

weixin_49199313的博客 1267

java基础_设计模式_设计基础(小鸭子游戏)

小鸭子游戏,是好多爱好者接触设计模式、认知设计模式概念的一个入门。 每个初学者的理解不同,我加上自己的理解大体是这样的:前提是处理大规模时,假设池塘中有10000头小鸭子,有红头鸭,野鸭子,木头鸭子等等,会叫会游泳,肯定是定义一个父类Duck,拥有这样的基本行为属性;现在要求鸭子中400头,可以飞,该怎么做? 有句话叫:当你处理大规模时,一定要写抽象层次编程。 问题:400只小鸭子可

yezhuAndroid的博客 1375

国科大 雁栖湖校区 研一上 课程避坑与生存指南

本文为国科大雁栖湖校区研一新生提供全面的课程避坑与生存指南,涵盖选课策略、核心课程学习技巧、校园生活攻略及心态管理。重点解析算法设计与分析、人工智能原理等硬核课程的学习方法,并分享食堂、住宿、自习室等实用生存技巧,帮助新生高效适应研究生生活。

weixin_29304985的博客 300

linux和mac安装+配置circos(

一定要下载完这两个包,GD才会work,要不然会报错,且-modules显示也是fail。官网的教程说的很明白,但是很多包都已经过时了需要在网上找。一般来讲,所有包的安装都不会太困难,除了GD。1.是因为官网给的链接下出来的tgz无法解压。2.我的电脑安装后GD照样是fail的。,进入这个地址下一个.tgz。第二点的原因在于,官网的情况。,进入这个地址,按部就班。GD安装困难有以下几点。搞了一天终于配置成功。

xiufan1的博客 549

策略模式笔记

什么情况下使用策略模式? 有很多个类。 这些类的区别只在于某个行为不同。 场景应用举例 购买火车车票时,同样的车位,选择成人票,学生票。 去上班过程选择使用自行车,步行,公交车等。 解决问题 解决将所有算法写在主程序中使用大量的if…else语句。 类之间的区别设计为Behavior接口 将飞这个行为在鸟类中独立出来作为一个区别。 一些鸟能展翅飞翔,一些鸟不能飞。 飞行行为 public interface FlyBehavior { public void fly();

liaojsgtcg的博客 364

将AAL图谱对应到Yeo7大网络中【原理,代码分析】

本文介绍了将AAL2图谱映射到Yeo7大功能网络的方法。通过整合皮层(Yeo2011)、小脑(Buckner2011)和纹状体(Choi2012)三个区域的功能网络图谱,采用投票机制确定每个AAL区域的网络归属。具体步骤包括:1)统计每个AAL区域体素在各网络图谱中的分布;2)选择体素数量最多的网络作为该区域的最终标签。该方法实现了从解剖结构到功能网络的映射,可获得120个AAL区域对应的7大功能网络标签。

yes666666的博客 2204

设计模式-策略模式(鵝鵞䳘䳗)

策略模式(Strategy Pattern)属于行为型模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。用算法族分别封装起来,实现同一个接口,让他们之间可以互相替换,让算法的变化独立于使用算法的客户。

有一分热,发一分光。 5932

SNN系列|编码篇(2)时序编码

Tempotral Coding 选择编码方法是要根据编码对象以及模型如何处理编码信息进行选择,如下是一种时序信息的编码对比: Threshold-based encoding 又称为tempotral contrast,该方法可以用于编解码一段序列,当差值超过阈值时发放脉冲,阈值是根据编码的序列自适应变化的。 使用该编码方法时,实值序列最好是沿时间变化的,因为在根据差分决定是否发放脉冲后,脉冲的顺序与差分顺序有关。 Time-to-first spike coding 该编码方法将信息用神经元首次

Tianlong Lee的博客 1万+

一生一芯 预学习阶段 NEMU代码学习(2)

如果 nemu_state.state == NEMU_ABORT:说明程序处于 "中止" 状态,输出 "ABORT",并且使用 ANSI_FG_RED 红色格式化显示。如果 halt_ret == 0,表示程序正常终止(触发了 "GOOD TRAP"),输出 "HIT GOOD TRAP",并使用 ANSI_FG_GREEN 绿色显示。如果要执行的指令数量 n 小于预定义的常量 MAX_INST_TO_PRINT,则将 g_print_step 置为 true,表示会逐步打印指令执行的过程。

weixin_45041054的博客 826

设计模式——策略模式

设计模式——策略模式 本片博文学习尚硅谷韩老师《设计模式》课程所做,在此非常感谢! 文章目录设计模式——策略模式概述问题引入编码实现UML编码测试 概述 策略模式的基本介绍 策略模式(Strategy Pattern)中,定义算法族(策略组),分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户; 这算法体现了几个设计原则,第一、把变化的代码从不变的代码中分离出来;第二、针对接口编程而不是具体类(定义了策略接口);第三、多用组合/聚合,少用继承(客户通过组合方式使用策略); 注意

m0_49039508的博客 388

YOLO11实战 第056期-基于yolo11的无人机航拍铁路障碍物检测实战-数据集&源码&系统

召回率曲线帮助评估模型在目标检测任务中,检测到真正目标的能力。通过这条曲线,可以评估模型在目标检测任务中的整体性能,并找到合适的置信度阈值,以在精确率和召回率之间做出最佳平衡。PR曲线越接近右上角,模型性能越好,曲线下方的面积越大,说明模型在不同置信度下的。这条曲线显示了随着置信度的增加,每个类别的召回率先变化较小,然后在某个点之后迅速下降。通过这条曲线,可以选择合适的置信度阈值,以优化模型的检测结果,平衡精确率和召回率。曲线都显示了随着召回率的增加,精确度略有下降的趋势,但整体上精确度保持在很高的水平。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 157

23个设计模式一文搞懂

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

weixin_72753562的博客 802

基于Spring Security 6的OAuth2 系列之二 - 客户端--非代码演示授权码模式

至此,我们就使用浏览器+postman工具演示了通过授权码模式去获取Gitee的用户信息。这过程中,我们只是遵循OAuth2的流程,就能够实现授权方法。那么接下来,我们采用代码方式来实现这个流程。

代码让AI扣 1812

nvidia系列教程-AGX-Orin usb3.0接口调试

NVIDIA Jetson AGX Orin 是一款高性能的嵌入式计算平台,适用于 AI 推理、机器人、自动驾驶等应用场景。本文将介绍如何对 AGX Orin 平台上的 USB 3.0 接口进行调试,包括硬件检查、软件配置以及常见问题的排查。本文主要介绍在AGX-Orin平台开启两个usb3.0口的方法。通过以上步骤,您可以有效地调试和优化 NVIDIA Jetson AGX Orin 上的 USB 3.0 接口。

flypig has a dream! 1500

基于Spring Boot的天气驱动业务逻辑设计与实现:以“下雨天”为例

在业务系统开发中,外部数据(如天气)常作为关键上下文驱动业务决策。其核心原理在于通过数据标准化与规则引擎,将动态的外部信息转化为可执行的业务逻辑。这一技术价值在于提升系统的智能化与场景适应性,广泛应用于出行提醒、动态推荐、运营策略等场景。本文聚焦于“下雨天”这一具体条件,通过Spring Boot框架,详细阐述了如何构建一个可配置、可扩展的天气条件处理模块。该模块采用策略模式,结合枚举定义与配置化管理,实现了对“小雨”、“中雨”、“暴雨”等多种降水类型的精准识别与业务处理,为开发者提供了一套高可复用的工程化

weixin_34176694的博客 389

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

daily_stock_analysis高级配置指南:自定义分析策略与多数据源优先级设置

daily_stock_analysis是一款LLM驱动的A股智能分析系统,支持多数据源行情、实时新闻、决策看板和自动推送功能。本文将详细介绍如何通过高级配置自定义分析策略和设置多数据源优先级,帮助您获得更精准的股票分析结果。 ## 📊 项目亮点速览 - **🔧 多数据源智能切换**:支持AkShare、Tushare Pro、Baostock、YFinance等主流数据源,自动故障切换

gitblog_01160的博客 710

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

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

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java基础语法学习指南:从零到精通的系统化路径

Java作为面向对象编程语言的代表,其强类型系统和丰富的语法特性构成了企业级开发的基石。理解数据类型体系、变量作用域和运算符原理是掌握Java编程的基础,这些概念直接影响代码的执行效率和内存管理。在实际开发中,从JDK环境配置到集合框架应用,每个环节都需要遵循工程实践规范。特别是随着Java 8引入Lambda表达式和Stream API,以及后续版本的模式匹配等特性,现代Java开发呈现出函数式与面向对象融合的趋势。本指南针对Java SE 17 LTS版本,系统梳理了从基础语法到面向对象核心概念的完整知

weixin_34062469的博客 424

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java从零到入门:30小时实战指南与核心技巧

Java作为企业级开发的主流语言,其'一次编写,到处运行'的特性使其在金融、电商等领域广泛应用。理解Java核心语法、面向对象编程和JVM内存管理是掌握这门语言的基础。通过实战项目如天气查询系统的开发,可以快速应用集合框架、多线程并发等关键技术。针对新手常见误区,如字符串拼接性能问题和异常处理原则,提供了优化方案。从环境配置到现代Java特性,本指南覆盖了Java开发全流程的关键知识点,帮助开发者在30小时内建立完整的知识体系。

weixin_30727835的博客 498

C 语言学习笔记

B站up Micro_Frank C语言大师系列课程笔记

g_c_m_g的博客 1221

Java设计模式(十)—状态模式、策略模式、职责链模式

本章目录标题第24章 状态模式24.1 应用场景:APP抽奖24.2 状态模式24.3 应用案例:APP抽奖14.4 状态模式的注意事项 第24章 状态模式 24.1 应用场景:APP抽奖 请编写程序完成 APP 抽奖活动 具体要求如下: (1)假如每参加一次这个活动要扣除用户 50 积分,中奖概率是 10% (2)奖品数量固定,抽完就不能抽奖 (3)活动有四个状态: 可以抽奖、不能抽奖、发放奖品和奖品领完 4) 活动的四个状态转换关系图 24.2 状态模式 基本介绍 (1)状态模式(State Pat

qq_37965402的博客 947

设计模式-2、面向接口编程就是对扩展开放,对修改关闭原则践行的最好方式

学习设计模式和学习数据库设计时候给我的是一样的感觉,看字面意思就能懂他想表达的是什么,但实际应用中总是不知所措。 以目前所了解到的知识,设计模式设计原则都是为了提供一个稳定的,可扩展,可读的代码,应用面向对象的四大特性-封装,抽象,多态和继承,那么如何做到对扩展开放,对修改关闭?其实用的就是封装和抽象的思想,封装好需要改变的部分,提供稳定的描述性的抽象定义。 对修改关闭是否是完全不修改,这肯定是不可能的,那怎么实现新的需求,这也是在字面意思后需要思考的部分,要关闭的是那些违反了解耦的有害修...

a245293206的博客 409

[菜鸟的设计模式之旅]策略模式

策略模式 定义 什么是策略模式?定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 我的理解就是:比如我们接下来要说到的鸭子案例,有的鸭子可以飞,而飞又分为很多种,飞很高,飞得很低各种,我们就会把飞这个行为定义为接口,然后再分别去实现,而我们的鸭子只需要注入“飞”的行为,就可以去飞,至于怎么飞,鸭子不用去管,这也算是面向接口编程吧。当然除了...

daxia7577的博客 199
上一篇: 行为型——状态模式(State)day21
下一篇: 行为型——职责链模式(Responsibility)day23
哆唻咪à
博客等级 码龄9年 0粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值