学妹面试拼刀刀被问Java策略模式是什么鬼?

JAVA设计模式面试小考点之 策略模式(实例讲解) 面试官:来吧,让我们聊聊JAVA的设计模式。 我OS:洒家背诵的设计23条终于派上了用场。 面试官:那你常用的是哪几种呢?开始你的表演吧。 我OS:???????这是让我死啊。 所以!!!拍黑板!!小葵花课堂开课啦!! 这节课让我们来了解一下策略模式 什么是策略模式 在了解策略模式之前,肯定是要去了解一下什么是策略模式的。 策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换。此模式让算法的变化独立于使用算法的客户。 策略模式的优缺点 优点: 算法可以自由切换... 阅读详情

哈哈哈哈 学妹跟我讲怎么机智面对的 我呆了!

小编这有自学的过程中有一些资源可以免费共享,

【内涵Java学习80g视频,大厂面试题库,Java学习书籍,或者技术指导】

加微信领取【备注007】

 

1.策略模式到底是什么鬼捏???

  • 策略模式属于对象的行为模式。

其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。

简单的说,策略模式代表了一类算法的通用解决方案,你可以在运行时选择使用哪种解决方案。

  •  策略模式的重心

策略模式的重心不是如何实现算法, 而是如何组织、调用这些算法, 从而使得程序结构更加灵活,具有更好的维护性和扩展性。

  • 算法的平等性

策略模式一个很大的特点就是各个策略算法的平等性。对于一系列具体的策略算法,地位都是一样的,因此可以实现算法之间可以互相替换。所有的策略算法在实现上也是相互独立的,相互之间是没有依赖的。所以可以这样描述这一系列策略算法:策略算法是相同行为的不同实现。

  • 运行时策略的唯一性 

运行期间,策略模式在每一个时刻只能使用一个具体的策略实现对象,虽然可以动态地在不同的策略实现中切换,但是同时只能使用一个。

  • 公有的行为

经常见到的是,所有的具体策略都有一些公有的行为。这时候,就应该把这些公有的行为放到共同的抽象策略角色

Strategy类里面。这时不能使用接口,应该使用抽象类来实现。

2.策略模式的结构

    

策略模式包含三部分内容:(如下图所示)

  1. 一个或多个使用策略对象的客户.(环境角色)
  2. 一个代表某个算法的接口, 它是策略模式的接口. (抽象策略角色)

c.一个或多个该接口的具体实现, 它们代表了算法的多种实现.(具体策略角色)

3.策略模式的应用  

 a.容错恢复机制, 程序运行的时候, 如果发生某种错误, 系统并不会直接挂掉或者说影响系统的其他功能点. 而是系统可以容忍这样的错误, 并且事先提供好了这种容错恢复机制, 来使得程序正常的运行下去.

 例如: 一个系统要对所有的操作进行日志记录, 且需要把日志记录落库, 方便后续的使用, 但是在把日志记录落库的时候, 可能会发生错误, 如数据库出现问题, 那就先可以记录在文件里面, 等到数据库问题修复, 再把文件中的日志记录同步到数据库中去.【参考文献】

对于这样的功能设计, 可以采用策略设计模式, 根据需要在运行期间进行动态的切换.

 b.假设现在要设计一个会员机制的购物系统, 对本系统的所有SVIP提供打八折的购物优惠, 对本系统的所有VIP提供打九折的购物优惠, 对非会员购物不打折. 那么对于这样的系统功能设计, 也可以采用策略模式来设计.

  c.使用不同的条件(物品的重量或者颜色等)来筛选库存中的物品, 可以将这一模式应用到更广泛的领域, 比如使用不同的标准来验证输入的有效性, 使用不同的方式来分析或者格式化输入.

 4.策略模式Demo

假设现在需要根据业务的需求,对调用接口传进来的参数,选择合适的策略进行处理,这里假设有策略一和策略二。

策略一:

/**

 * @author lyh

 * @version v-1.0.0

 * @since 2021/6/2

 */

public class Client {

    public static void main(String[] args) {

        //根据需要客户自行选择策略

        //加入Java开发交流君样:756584822一起吹水聊天

        //选择策略1

        StrategyObj strategyOne = new StrategyObj(new StrategyOne());

        System.out.println(strategyOne.strategy("one"));

        //选择策略2

        StrategyObj strategyTwo = new StrategyObj(new StrategyTwo());

        System.out.println(strategyTwo.strategy("two"));

    }

}

输出:

执行策略1!

执行策略2!

Process finished with exit code 0

策略二:

/**

 * @desc:策略接口

 */

public interface Strategy {

    String execute(String s);

}

/**

 * @desc:策略接口封装

 */

public class StrategyObj {

    private final Strategy strategy;

    public StrategyObj(Strategy v) {

        this.strategy = v;

    }

    public String strategy(String s) {

        return strategy.execute(s);

    }//

}

 Lambda表达式避免了采用策略设计模板时僵化的模板代码。仔细看上面的代码会发现,Lambda表达式实际已经对策略进行了封装, 这就是创建策略设计模式的初衷.

5.策略模式的优缺点

优点 

  1. 使用策略模式可以避免使用多重条件if…else if…else语句, 多重条件不易维护且代码可读性差.

 b.策略模式提供了管理相关的算法族的办法. 策略类的等级结构定义了一个算法或者行为族. 恰当使用继承可以把公共的代码移到父类里面, 从而避免代码重复.【参考文献】  

缺点

  1. 客户端必须知道所有的策略类, 并自行决定使用哪一个策略类. 这就意味着客户端必须理解这些算法的区别, 以便适时选择恰当的算法类. 换言之, 策略模式只适用于客户端知道算法或行为的情况.
  2.  b.由于策略模式把每个具体的策略实现都单独封装成类, 如果备选的策略很多的话, 那么对象的数目就会很多.  

最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。

论文阅读:ICLR 2023 FINE-TUNING ALIGNED LANGUAGE MODELS COMPROMISES SAFETY, EVEN WHEN USERS DO NOT INTEND 对大型语言模型(LLMs)进行微调以适应特定用例通常涉及对预训练的LLMs进行进一步的定制。Meta公开发布Llama模型和OpenAI的API允许在自定义数据集上微调GPT-3.5 Turbo,也鼓励这种做法。但是,这种自定义微调与安全成本有何关联?我们注意到,尽管现有的安全对齐基础设施可以在推理时限制LLMs的有害行为,但它们并未涵盖将微调权限扩展到最终用户时的安全风险。我们的红队研究发现,即使是只有几个设计有敌意的训练示例进行微调,也可以破坏LLMs的安全对齐。 阅读详情

相关推荐

Arduino IDE 2配置ESP32-S3工程全指南

嵌入式开发中,Arduino框架通过硬件抽象层(HAL)大幅降低MCU入门门槛,其核心在于板级支持包(BSP)与底层构建系统(如ESP-IDF)的精准协同。理解CPU频率、Flash模式、分区表、PSRAM等关键配置,本质是掌握SoC时钟树、SPI Flash通信协议、内存映射与FreeRTOS调度机制的技术原理。这些参数不仅决定固件能否启动,更直接影响功耗、实时性、OTA升级与大容量应用(如LVGL、TFLite Micro)的可行性。本文以ESP32-S3为例,聚焦Arduino IDE 2.x环境下从

root9的博客 781

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

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

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

声纹识别实战:用Python从零搭建一个简易声纹验证系统(附完整代码)

本文是一份详细的声纹识别实战指南,教你使用Python从零搭建一个简易的声纹验证系统。文章涵盖了从音频采集、预处理、MFCC特征提取,到基于高斯混合模型(GMM)的建模与验证全流程,并提供了完整的代码实现,帮助开发者快速掌握这项生物特征识别核心技术。

ik6789012的博客 229

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

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

竹林幽深 248

STM32CubeIDE入坑指南

一 前言 在科技日新月异的今天,作为从事效率为先的苦逼 IT 行业,秉承着我不入地狱谁入地狱的伟大革命精神,我决定再一次做第一个吃螃蟹的人,通过自身的入坑过程,为大家测试STM32CubeIDE这款新式工具。(其实是为了我能省点时间,快点做完项目,多挣点钱买几瓶肾气丸) 二 看一看别人是如何入坑的 二 手把手带你入坑 三 相关资料 ...

CH的博客 1万+

R语言分段回归

1.利用虚拟变量进行线性回归 (MEdata.csv的数据来源:https://github.com/ChenQihome9/优快云-Data-Library/blob/master/MEdata.csv) 问题13:针对TAX~GDP,使用分段回归方法,找到其回归方程。编程,并根据程序结果叙述如下几方面问题:(1)分几段最佳?(不超过5段内)(2)分段位置定在哪儿最佳?(3)写出最佳方...

ChenQihome9的博客 1万+

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

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

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

51单片机+HX711电子秤Proteus仿真保姆级教程(附完整源码与避坑指南)

本文详细介绍了51单片机与HX711电子秤在Proteus仿真中的全流程实战指南,包括电路设计、核心代码实现、典型问题排查及系统集成等关键步骤。特别提供了HX711驱动程序的编写技巧和称重数据处理算法,帮助开发者快速搭建高精度电子秤仿真系统,并避免常见的设计陷阱。

weixin_30752699的博客 413

【策略模式详解】面试官最爱考的设计模式,5分钟让你彻底掌握!

策略模式(Strategy Pattern)是一种行为型设计模式,它定义了算法族,分别封装起来,让它们之间可以互相替换。策略模式让算法的变化独立于使用算法的客户端。简单来说,策略模式就像是给你的应用程序提供了一个工具箱,你可以根据不同情况选择最合适的工具来完成任务。比如计算折扣时,可能有多种折扣算法(满减、打折、会员价等),策略模式让你能够轻松切换这些算法。策略模式是一种极其实用的设计模式,它通过分离算法与使用算法的客户端,使系统更加灵活。

tym3125536957的博客 1147

QML教程04 - Image:搞定界面上的所有图片

本文是QML教程系列的第四篇,重点讲解Image控件的实战用法。文章从图片显示常见的变形、卡顿等问题入手,详细介绍了Image的核心属性和使用技巧。主要内容包括:图片路径的三种写法(相对路径、qrc资源、网络URL)、最重要的fillMode属性解析(PreserveAspectFit、PreserveAspectCrop、Stretch的适用场景)、性能优化方法(sourceSize设置)、异步加载(asynchronous)以及圆形头像的实现方案。

BenBierBa的博客 1608

CATIA文件的网页预览方案

CATIA是工业设计中广泛使用的专业软件,产出`.CATPart`或 `.CATProduct`等文件类型,当资产数量较大时,我们希望快捷预览这些文件,就有了`CATPart`文件网页预览的需求 但我们知道,网页上无法直接渲染`CATPart`这种复杂的文件, CATIA生成的文件(如 `CATPart` 和 `CATProduct`)不仅包含三维几何信息(例如点、线和曲面),还涵盖了丰富的元数据与专业设计特征。 那有没有办法,能实现CATIA文件在网页上的便捷预览?

weixin_44211633的博客 1445

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

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

HappyAcmen 1135

数据分析案例-汽车客户信息数据可视化分析

本数据集来源于kaggle,原始数据集共有8068条,11个特征变量,各变量含义解释如下:ID:客户IDGender:客户性别Ever_Married:客户婚姻状况Age:客户年龄Graduated:客户是毕业生吗?Profession:客户的职业Work_Experience:多年工作经验Spending_Score:客户的消费评分Family_Size:客户家庭成员人数(含客户)Var_1:客户的匿名类别Segmentation:(目标)客户的客户群。

m0_64336780的博客 1万+

学妹面试拼刀刀被问Java策略模式是什么鬼?哈哈哈哈

学妹面试拼刀刀被问Java策略模式是什么鬼?哈哈哈哈 学妹跟我讲怎么机智面对的 我呆了! ????1.策略模式到底是什么鬼捏??????? 策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 简单的说,策略模式代表了一类算法的通用解决方案,你可以在运行时选择使用哪种解决方案。 策略模式的重心???? 策略模式的重心不是如何实现算法, 而是如何组织、调用这些算法, 从而使得程序结

wj1314250的博客 1万+

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

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

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

学妹面试拼刀刀被问Java策略模式是什么鬼?哈哈哈哈_java面试题 策略模式是什么意思

什么是ActiveMQ?ActiveMQ服务器宕机怎么办?丢消息怎么办?持久化消息非常慢怎么办?消息的不均匀消费怎么办?死信队列怎么办?ActiveMQ中的消息重发时间间隔和重发次数吗?

2401_84439805的博客 834

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

策略模式面试三道题

策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。在面试中,关于策略模式的题目可以从基本概念、应用实例、优缺点、与其他模式的结合等多个角度进行设计。

在那一刻,我们或许会发现自己站在了时间的另一岸,以更加成熟和宽广的胸怀,去拥抱那份隔代相传的深情。 851

visio安装包

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

Safetensors格式优势:hf_mirrors/xinsir/controlnet-union-sdxl-1.0模型文件安全解析

在AI绘图领域,模型文件的安全性与高效性一直是开发者和用户关注的核心问题。**Safetensors格式**作为一种新型模型存储格式,正在逐步取代传统的Pickle格式,成为AI模型分发的首选。本文将以 **ControlNet++ SDXL 1.0** 模型为例,深入解析Safetensors格式的核心优势,以及它如何保障模型文件的安全性与稳定性。 ## 📌 什么是Safetensors格

gitblog_00838的博客 689

神坑面试题之策略模式

本图片来自深圳一家独角兽公司 神坑面试题之设计模式 当我看到这题目 觉得很有意思 不就是去除if else if 吗? 这不就是典型的策略模式吗?当然单独靠策略模式是无法全部消除if else if的 还需要靠工厂+策略模式 实现消除if GOF的《设计模式》著作中认为策略模式可以消除一些条件语句,我对此持怀疑态度。正如上面的例子,虽然由于Context在初始化的时候已经指定了策略实现,在计算逻辑中不需要根据条件选择逻辑分支。但是,客户端代码在初始化Context的时候,如何判断应该传入哪个策略实现呢?其实

热爱码农的平民博客 942

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

【Java中23种面试常考的设计模式之策略模式(Strategy)---行为型模式】无论是从代码实现上,还是类图,策略模式和状态模式几乎都一样,但他们本质上是有所不同的,策略模式是完成一件事有不同实现方式,不同的行为;但是状态模式是某一个对象对应的不同状态,总体还是完成一件事,这件事中对应着不同的状态,你可以简单的把它理解为它只有一种策略,这种策略下对应着多种状态。策略模式核心思想是:在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。

Coder_ljw的博客 908

java面试题-策略模式

什么是策略模式?[面试7.0] 简单的说分为3个角色:环境类(Context): 用来操作策略的上下文环境抽象策略类(Strategy): 抽象的策略类,需要环境类实现该抽象策略接口具体策略类(ConcreteStrategy): 具体的策略实现,每一种策略一个实现策略模式关注的是对象的行为,是对算法的封装策略模式的优点: 策略模式遵循开闭原则,实现代码的解耦,扩展的时候只需要实现策略接口就可以 ...

阳光码术-Java面试宝典 388

Java面试--策略模式

面试题:策略模式的使用场景(阿里面试题) 一、策略模式改你那 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化。 二、策略模式的使用场景 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为 2、一个系统需要动态地在几种算法中选择一种。 三、策略...

小刺猬 2958

面试官:说说你对策略模式的理解?应用场景?

一、是什么策略模式(Strategy Pattern)指的是定义一系列的算法,把它们一个个封装起来,目的就是将算法的使用与算法的实现分离开来一个基于策略模式的程序至少由两部分组成:策略类,...

weixin_44475093的博客 506

面试必问设计模式之策略模式

本系列课程将带着大家以面试题的方式 深入设计模式。这么快到了设计模式的第五篇啦,上一篇文章带着大家输入学习了设计模式的工厂模式,这篇文章带着大家深入策略模式Define a family of algorithms,encapsulate each one,and make them interchangeable.(定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。)抽取共同行为,根据抽象策略实现不同的策略,交给不同的子类实现 策略模式主要解决多重条件判断的问题策略模式使用的就是面向对象的继承和

janyxe的博客 518

入门设计模式之策略模式

设计模式-入门 什么是设计模式? 我发现有很多人,都没听过设计模式,设计模式很重要,甚至面试的时候也会问你会不会设计模式。可见设计模式是每个程序员必须具备的技能。那么什么是设计模式呢?设计模式是为了解决项目中各种需求和问题的一种代码编写方式,面向对象语言都可以使用设计模式来编写自己的代码,面向过程语言如:C语言就不能使用设计模式,因为设计模式是针对面向对象的开发方式。想了解多的设计模式,点...

Wyndem的博客 659

Spring中策略模式的2个经典应用,可以用来怼面试官了!

一、背景程序员在项目实战中,策略模式用的非常多。二、学习目标会在Spring项目中运用策略模式三、代码例子废话不多说,Java的软件开发们注意啦,开车啦!下面是一个查询业...

java面试笔试 822

面试官,求求你别再问我策略模式

概念 策略模式(Strategy): 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。 策略模式的优点是简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测...

莫颜道人 548
上一篇: Java零基础小白快速入门秘诀
下一篇: 熬秃了头!熬坏了身子!的程序员路在何方???
Java机械师
博客等级 码龄5年 296粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值