当前位置: 首页 > news >正文

策略模式:思考与解读

原文地址:策略模式:思考与解读  更多内容请关注:7.深入思考与解读设计模式

引言

你是否曾遇到过这样的情况:在一个系统中,有许多算法或策略,每种策略的实现逻辑相似,但在某些情况下需要进行替换和扩展?当你面对这些问题时,是否想过,能否在不修改代码的情况下轻松地切换不同的策略或算法?

如果这些问题引起了你的思考,那你可能需要了解一种叫做“策略模式”的设计模式。策略模式究竟是什么?它如何能帮助我们解决上述问题?它适用于哪些场景?我们将通过一系列问题来引导你一步步探讨这一模式。

什么是策略模式?

首先,让我们从一个简单的问题开始。

问题1:当你有多个算法或者策略时,通常如何选择其中一个?

假设你正在编写一个程序,涉及到不同的支付方式,比如支付宝、微信支付和银行卡支付。每种支付方式都需要不同的算法来完成支付。那么,如何选择并应用其中的一种支付方式呢?

问题2:你是否曾经将不同的算法直接写在一个类中,导致类的逻辑过于复杂?

想象一下,如果你将所有支付方式的逻辑都放在一个类里,会发生什么?这个类会变得非常庞大和难以维护。如果你需要增加新的支付方式,你还需要修改这个类,是不是很不方便?

问题3:如果有一种方法可以将不同的支付方式(算法)封装在独立的类中,并且能够动态地在运行时进行切换,你会觉得这种方法如何?

是否想过,将支付方式封装在不同的类中,并且在程序运行时根据用户的选择动态切换支付方式,是否可以避免上述问题?

答案就是策略模式。策略模式允许你将不同的算法或策略封装成独立的类,这样客户端代码只需要选择和应用合适的策略,而不需要关心算法的具体实现。

策略模式的核心构成

策略模式通常由以下几个关键部分组成。那么,如何才能理解它们呢?我们来逐一思考。

问题4:在策略模式中,谁来决定使用哪种策略?

在一个系统中,是否需要有一个“控制者”来管理和切换不同的策略?这个控制者的角色是什么?它应该如何与策略进行交互?

在策略模式中,上下文类(Context) 扮演了这个“控制者”的角色。它持有一个策略接口的引用,并负责在运行时根据需要切换具体的策略。

问题5:如果不同的策略类实现了相同的接口,能否让这些策略类的使用变得更加一致和灵活?

策略接口(Strategy) 是策略模式的关键部分。它定义了所有具体策略类需要实现的方法。这样,所有的具体策略类(如支付方式)都可以通过这个统一的接口进行访问。你能否想象到,当策略类实现了相同的接口时,它们可以被统一地调用,而无需关心它们的具体实现?

问题6:如何实现不同策略类的具体逻辑?

每个具体的策略类将如何实现策略接口,并在特定的场景下提供不同的算法?如果我们将算法封装在独立的类中,是否能够提高代码的可维护性?你能举一个例子,说明一个具体的策略类如何实现不同的算法吗?

示例:

我们来思考一个支付系统的例子。你是否觉得,我们可以将每种支付方式(例如支付宝、微信支付、银行卡支付)作为具体的策略类,它们都实现一个统一的支付接口?

问题7:那么,客户端如何与策略模式进行交互?

假设我们已经创建了多个策略类(不同的支付方式),但客户端如何选择并使用这些策略类呢?客户端需要做什么才能改变策略呢?

问题8:如果用户希望在运行时切换策略,如何做到这一点?

策略模式的一个关键特点是能够在运行时动态选择不同的策略。你认为,如何实现策略的动态切换?我们是否需要提供一个方法来让客户端更新或更改当前的策略?这样,用户就能根据实际情况选择合适的支付方式。

策略模式的优点和缺点

策略模式具有很多的优点,但它是否适用于所有场景呢?

问题9:策略模式带来的最大好处是什么?它能解决哪些问题?

通过将不同的算法封装成独立的策略类,策略模式能帮助我们避免复杂的条件语句。这是否意味着我们的代码更加清晰和易于维护?

问题10:使用策略模式时,可能会面临哪些挑战?

每种策略都需要一个独立的类,这是否会导致类的数量增加?这样做是否会增加代码的复杂度?策略模式是否适用于所有情况,还是在某些情况下可能导致不必要的复杂性?

策略模式的实际应用

那么,策略模式在现实生活中有哪些实际应用呢?我们来思考一些问题:

问题11:你能想到哪些场景,策略模式能够发挥作用?

比如支付系统,还是其他场景,如排序算法、日志输出策略、数据库查询策略等。你能举出一些实际的例子来说明,策略模式如何在这些场景中提高灵活性和可扩展性?

问题12:如何将策略模式与其他设计模式结合使用?

策略模式与其他设计模式(如工厂模式、观察者模式等)是否能够结合使用?你能想到它们之间的协同作用吗?

接下来,我们将通过具体的代码示例来加深理解策略模式。

策略模式深入解读

一、引言

策略模式(Strategy Pattern)是一种非常有用的设计模式,它让我们可以通过选择不同的策略(或算法)来改变某个类的行为,而不需要修改类的代码。为了更好地理解这一概念,我们将一步步地深入解读策略模式的含义和实际应用。


二、简单理解:什么是策略模式?

1. 什么是策略模式?

策略模式是一个行为型设计模式,它让我们能够在运行时选择并切换不同的“策略”来解决问题。策略指的是算法或行为。当我们有多个算法可以选择时,策略模式帮助我们将这些算法封装起来,并且在不改变客户端代码的前提下,切换不同的算法。

简单来说,策略模式就是一种允许你在不同的情况下选择和切换“方法”的方式。

举个简单的例子:想象一下,你在一个商店购买商品,支付方式有多种选择:支付宝、微信支付、银行卡支付等。每种支付方式都可以看作是一种策略,你可以根据实际情况选择一种支付方式。

2. 策略模式的主要组成

策略模式的设计涉及三个主要部分:

  • 上下文(Context):它是使用策略的环境。它持有一个策略对象,并在需要时调用它。

  • 策略接口(Strategy):这是一个定义了算法的接口,所有具体策略都需要实现这个接口。

  • 具体策略(Concrete Strategy):这些是实现策略接口的具体算法类。


三、用自己的话解释:如何理解策略模式?

1. 类比实际生活中的场景

想象你是一位司机,要选择不同的交通工具去不同的地方:

  • 如果去的地方近,你可能选择走路;

  • 如果地方远,你可能选择开车;

  • 如果天气不好,你可能选择打车。

在这个场景中,“走路”、“开车”、“打车”就是三种策略,而你根据具体情况(距离、天气等)选择其中一种策略。每次选择的策略会影响你的出行方式,而你不需要改变你作为司机的角色。

2. 为什么要使用策略模式?

如果你直接在代码里使用大量的 if-else 或 switch 来判断该使用哪种算法或方法,那样的代码会变得复杂且难以维护。当你需要新增一种算法时,你需要修改已有的代码,这违背了“开闭原则”(对扩展开放,对修改封闭)。策略模式则通过将不同的算法封装成独立的策略类,避免了修改现有代码,只需要增加新的策略类即可。


四、深入理解:策略模式的实现

接下来,我们将通过具体的代码示例来加深理解。

示例:计算不同商品的折扣

假设我们有一个电商系统,需要根据不同的促销策略计算商品的价格。例如:

  • 满200元打9折

  • 满100元打8折

  • 满50元减20元

我们可以用策略模式来实现不同的折扣策略。

1. 策略接口:定义算法
# 策略接口:定义折扣计算的接口
class DiscountStrategy:def apply_discount(self, price):pass
2. 具体策略:实现不同的折扣计算方式
# 满200元打9折
class DiscountFor200Strategy(DiscountStrategy):def apply_discount(self, price):if price >= 200:return price * 0.9return price# 满100元打8折
class DiscountFor100Strategy(DiscountStrategy):def apply_discount(self, price):if price >= 100:return price * 0.8return price# 满50元减20元
class DiscountFor50Strategy(DiscountStrategy):def apply_discount(self, price):if price >= 50:return price - 20return price
3. 上下文类:购物车(选择策略)
# 上下文:购物车类,使用策略计算折扣后价格
class ShoppingCart:def __init__(self, strategy: DiscountStrategy):self.strategy = strategydef set_strategy(self, strategy: DiscountStrategy):self.strategy = strategydef calculate_price(self, price):return self.strategy.apply_discount(price)
4. 使用策略
# 创建购物车实例,设置不同的折扣策略
cart = ShoppingCart(DiscountFor200Strategy())
print(cart.calculate_price(250))  # 输出:225.0(200元以上打9折)cart.set_strategy(DiscountFor100Strategy())
print(cart.calculate_price(150))  # 输出:120.0(100元以上打8折)cart.set_strategy(DiscountFor50Strategy())
print(cart.calculate_price(80))   # 输出:60.0(50元以上减20元)
代码解析:
  1. DiscountStrategy:这是一个策略接口,所有具体的策略类都需要实现 apply_discount 方法。

  2. 具体策略类:DiscountFor200StrategyDiscountFor100Strategy 和 DiscountFor50Strategy 是三种不同的折扣策略,它们实现了 apply_discount 方法,分别根据价格进行不同的折扣计算。

  3. ShoppingCart 类:这是上下文类,它接受一个策略对象,并使用该策略来计算商品价格。通过 set_strategy 方法,可以随时更换策略。


五、解释给别人:如何讲解策略模式?

1. 用简单的语言解释

策略模式让你能够根据不同的需求选择不同的“方法”。比如,你要计算商品价格的折扣,根据不同的条件(如价格大小),你可以选择不同的折扣策略。这些折扣策略像是各种“方法”,而你通过策略模式,能够在不修改代码的前提下,灵活地更换策略。

2. 为什么要使用策略模式?

使用策略模式可以避免代码中出现大量的 if-else 或 switch 语句。当你需要添加一种新的策略时,只需要创建一个新的策略类,且不需要修改已有代码。这不仅使代码更简洁,还能提高可扩展性和维护性。


六、总结

通过一系列问题的探讨,我们逐步揭示了策略模式的核心概念和实现方式。策略模式不仅能帮助我们解决不同算法的选择问题,还能提高系统的灵活性和可维护性。然而,它也有一定的缺点,比如类数量的增加和复杂性的提升。

我们可以得出以下结论:

  • 策略模式 是一种允许我们在运行时灵活选择不同算法的设计模式;

  • 它通过定义策略接口、具体策略和上下文类,将算法封装起来,避免修改现有代码;

  • 策略模式的主要优势是 扩展性 和 灵活性,它避免了使用大量的条件判断语句,让代码更易于维护。

策略模式的优点:
  • 开闭原则:可以在不修改现有代码的情况下扩展新的策略。

  • 灵活性:运行时可以根据需要选择合适的策略。

  • 简化代码:避免了大量的条件判断,使得代码更加清晰。

策略模式的缺点:
  • 类的数量增加:每种策略都需要创建一个策略类,可能会导致类数量增多。

相关文章:

策略模式:思考与解读

原文地址:策略模式:思考与解读 更多内容请关注:7.深入思考与解读设计模式 引言 你是否曾遇到过这样的情况:在一个系统中,有许多算法或策略,每种策略的实现逻辑相似,但在某些情况下需要进行替换和扩展&am…...

1.Vue3 - 创建Vue3工程

目录 一、 基于vue-cli 脚手架二、基于vite 推荐2.1 介绍2.2 创建项目2.3 文件介绍2.3.1 extensions.json2.3.2 脚手架的根目录2.3.3 主要文件 src2.3.3.1 main.js2.3.3.2 App.vue 组件2.3.3.3 conponents 2.3.4 env.d.ts2.3.5 index.html 入口文件2.3.6 package2.3.7 tsconfig…...

Spring MVC 执行流程全解析:从请求到响应的七步走

Spring MVC 的工作流程,漏了这一个今天刚好面试提到了,没回答出来,记录一下。 🧭 Spring MVC 整体执行流程一览(从请求到响应) ✅ 1. 请求发出:浏览器发送 HTTP 请求 如用户访问: …...

四元数转旋转矩阵

目录 gsplat 四元数转旋转矩阵等同代码实现 scipy 四元数转旋转矩阵替换代码 gsplat 四元数转旋转矩阵等同代码实现 import torch import torch.nn.functional as Fdef quat_act(x: torch.Tensor) -> torch.Tensor:return x / x.norm(dim-1, keepdimTrue)def normalized_q…...

Pytorch的极简transformer用于时间序列预测

本博客来源于CSDN机器鱼,未同意任何人转载。 更多内容,欢迎点击本专栏,查看更多内容。 目录 0.引言 1.数据准备 2. 网络搭建 3. 完整代码 4. 结语 0.引言 在【博客】中,我们基于tensorflow2.x深度学习框架搭建了transforme…...

垂直行业突围:工业软件在汽车、航空领域的 “破壁” 实践

在当今科技高速发展的时代,工业软件已悄然完成从通用工具到垂直行业 “战略武器” 的蜕变。特别是在汽车与航空这两大高端制造领域,工业软件的价值早已超越单纯的效率提升,成为关乎核心技术自主可控的关键要素,一场围绕工业软件的…...

人工智能在智能家居中的应用与发展

随着人工智能(AI)技术的飞速发展,智能家居逐渐成为现代生活的重要组成部分。从智能语音助手到智能家电,AI正在改变我们与家居环境的互动方式,让生活更加便捷、舒适和高效。本文将探讨人工智能在智能家居中的应用现状、…...

维度建模工具箱 提纲与总结

这里写自定义目录标题 基本概念事实表和维度表BI(Business Intelligence) 产品 事实表事实表的粒度事实表的种类 维度表建模技术基本原则避免用自然键作为维度表的主键,而要使用类似自增的整数键避免过度规范化避免变成形同事实表的维度表 SCD(Slowly Changed Dimen…...

Vue3 源码解析(六):响应式原理与 reactive

今天这篇文章是笔者会带着大家一起深入剖析 Vue3 的响应式原理实现,以及在响应式基础 API 中的 reactive 是如何实现的。对于 Vue 框架来说,其非侵入的响应式系统是最独特的特性之一了,所以不论任何一个版本的 Vue,在熟悉其基础用…...

规则引擎 - Easy Rules

Easy Rules 依赖demodemo1demo2 总结 Easy Rules 是一个轻量级的 Java 规则引擎,使用简单,适合快速开发和简单的规则场景,适合对于一些判断,是否属于白名单,是否有特殊权限,是否属于当前区域,调…...

uniapp打ios包

uniapp在windows电脑下申请证书并打包上架 前言 该开发笔记记录了在window系统下,在苹果开发者网站生成不同证书,进行uniapp打包调试和上线发布,对window用户友好 注:苹果打包涉及到两种证书:开发证书 和 分发证书 …...

from tensorflow.keras.models import Model中Model报红;以及动态链接库(DLL)初始化例程失败

博主也是网上搜索资料又问的kimi 试了一节课 总结下来: 1、用这句话导入Model from tensorflow.keras.models import Model 2、更新pip pip install --upgrade pip 3、卸载重装tensorflow pip uninstall tensorflow 4、使用阿里云使tensorflow降低到2.8.0&a…...

【初阶数据结构】树——二叉树(上)

文章目录 目录 前言 一、树 1.树的概念与结构 2.树相关术语 3.树的表示 二、二叉树 1.概念与结构 2.特殊的二叉树 3.二叉树存储结构 总结 前言 本篇带大家学习一种非线性数据结构——树,简单认识树和二叉数以及了解二叉树的存储结构。 一、树 1.树的概念与结构 树…...

Debian GNU/Linux的新手入门介绍

Debian GNU/Linux:起源、基本介绍与发行版对比 一、起源与发展历程 Debian GNU/Linux 是现存最古老的 Linux 发行版之一,由 Ian Murdock 于 1993 年 8 月 16 日创立。其名称结合了他的女友(后成为妻子)Debra 和他自己的名字 Ian…...

13 数据存储单位与 C 语言整数类型:从位到艾字节、常见整数类型及其范围、字面量后缀、精确宽度类型详解

1 数据存储单位 在计算机科学领域,数据存储采用分层级的单位体系,各层级单位以 2 的幂次方为换算基础,而非传统数学中的 10 的幂次方。 以下是常见的数据存储单位介绍: 位(bit,b)是计算机中的最…...

【CPU】结合RISC-V CPU架构回答中断系统的7个问题(个人草稿)

结合RISC-V CPU架构对中断系统七个关键问题的详细解析,按照由浅入深的结构进行说明: 一、中断请求机制(问题①) 硬件基础: RISC-V通过CLINT(Core Local Interrupter)和PLIC(Platfor…...

基于unsloth微调一个越狱大模型

网上其实并没有找到现成的开源越狱数据集,所以数据集获取是个麻烦事。想了想easydataset,可能还是不行,easydataset是基于大模型回答的,大模型一般都做了对齐训练,那本地文档生成数据这条路也不可靠。 现成的越狱数据…...

城市客运安全员证适用岗位及要求

城市客运安全员证适用岗位及要求 城市客运安全员证是从事城市公共交通行业安全管理工作的重要资格证书,主要适用于以下岗位: 1. 公交车辆安全员 岗位职责:负责公交车辆运行过程中的安全监督,检查乘客携带物品,防止危…...

UDP协议详解

UDP协议详解 一、理解socket套接字 1.1理解IP ​ 我们都知道在网络中IP用来标识主机的唯一性。那么?这句话该如何理解呢?大家来思考一个问题:计算机之间传输传输数据是目的吗?就好比,你爸叫你给你妈带句话&#xff…...

Unreal Engine中FRotator与FQuat在赛车游戏方向盘控制中的协同应用解析

摘要 深入剖析 Unreal Engine 中这两个关键组件在赛车游戏方向盘控制中的协同作用,涵盖全流程与实践技巧。 一、引言 在赛车游戏开发中,实现逼真的方向盘控制是提升玩家体验的关键要素之一。而在 Unreal Engine 里,FRotator 与 FQuat 这两…...

第十四届蓝桥杯 2023 C/C++组 飞机降落

目录 题目: 题目描述: ​编辑题目链接: 思路: 核心思路: 思路详解: 代码: 代码详解: 题目: 题目描述: 题目链接: 洛谷 P9241 [蓝桥杯 20…...

完美解决Microsoft Edge浏览器无法同步/一直在同步中/更新失败等问题

在使用Microsoft Edge浏览器的过程中,我们可能会遇到一些常见的问题,例如无法同步数据或无法更新浏览器。这些问题通常可以归结为以下两个主要原因: 一、网络连接问题 当Edge浏览器无法同步或更新时,首要考虑的是网络连接问题。…...

CSS文本属性

CSS文本属性 在CSS中,可以使用以下属性来设置文本的样式和布局: 1.color : 设置文本颜色。可以使用颜色名称、十六进制值或RGB值来指定颜色: p{color:red; }font-family : 设置文本的字体系列。可以指定一个或多个字…...

思科路由器做DNS服务器

1.实验环境中,常常需要一台DNS服务器来做名称解析,一般会安装一台windows server,启用dns服务,或者安装一台Linux服务器,安装Bind来实现;虽然可以实现你想要的功能,但是费时费力且配置复杂&…...

Windows部署FunASR实时语音听写便捷部署教程

FunASR提供可便捷本地或者云端服务器部署的实时语音听写服务,内核为FunASR已开源的runtime-SDK。 FunASR集成了达摩院语音实验室在Modelscope社区开源的语音端点检测(VAD)、Paraformer-large非流式语音识别(ASR)、Paraformer-large流式语音识别(ASR)、标点预测(PUNC) 等相关能…...

C++之unordered封装

目录 一、哈希表的修改 1.1、哈希表节点结构 1.2、迭代器 1.3、哈希表结构 1.4、完整代码 二、unordered_map的实现 二、unordered_set的实现 一、哈希表的修改 注意:这里我们使用哈希桶来封装unordered_map和unordered_set。 1.1、哈希表节点结构 templa…...

Pycharm(九)函数的闭包、装饰器

目录 一、函数参数 二、闭包 三、装饰器 一、函数参数 def func01():print("func01 shows as follows") func01() # 函数名存放的是函数所在空间的地址 print(func01)#<function func01 at 0x0000023BA9FC04A0> func02func01 print(func02)#<function f…...

7. 栈与队列(随想录)

1.栈实现队列 2.用队列实现栈 3.有效的括号 4.删除字符串中的所有相邻重复项 5.逆波兰表达式 6.滑动窗口最大值 7.前k个高频元素...

GPU软硬件架构协同设计解析

GPU软硬件架构协同设计解析 ​ GPU(图形处理器)的软硬件协同设计是其在通用计算和高性能计算(HPC)领域取得突破的核心原因。以下从硬件架构、软件架构、协同设计的关键技术及典型案例展开深度解析。 一、硬件架构的核心设计原则 流式多处理器(SM)的模块化设计 计算单元…...

【软考】论NoSQL数据库技术及其应用示例

论NoSQL数据库技术及其应用 随着互联网web2.0网站的兴起&#xff0c;传统关系数据库在应对web2.0 网站&#xff0c;特别是超大规模和高并发的web2.0纯动态SNS网站上已经显得力不从心&#xff0c;暴露了很多难以克服的问题&#xff0c;而非关系型的数据库则由于其本身的特点得到…...

特伦斯智慧钢琴评测:如何用科技重塑钢琴学习新体验

对于渴望学习钢琴的爱好者而言&#xff0c;传统钢琴的笨重体积、高昂成本与扰民问题往往成为绊脚石。而智能电钢琴的出现&#xff0c;正以轻量化设计、沉浸式体验与智能化功能打破这些壁垒。特伦斯智慧钢琴凭借其专业级硬件配置与创新教学系统&#xff0c;成为市场中兼具性能与…...

UML 状态图:解锁电子图书馆管理系统的高效设计

目录 一、UML 状态图的核心要素 状态&#xff1a;系统行为的 “栖息地” 转换&#xff1a;连接状态的 “桥梁” 动作&#xff1a;赋予功能的 “实践者” 二、电子图书馆管理系统状态图解析 系统空闲状态&#xff1a;一切的起点 读者登录与身份验证&#xff1a;安全的 “…...

UML 状态图:陪伴机器人系统示例

目录 一、状态图的基本概念 1.1 状态 1.2 转换 1.3 动作 二、陪伴机器人系统状态图解析 2.1 初始与待机状态 2.2 情绪检测中状态 2.3 陪伴模式下的细分 2.4 疏导模式的严谨流程 2.5 安抚模式的关键作用 三、状态图绘画 四、UML 状态图的强大 4.1 直观呈现系统行为…...

超详细实现单链表的基础增删改查——基于C语言实现

文章目录 1、链表的概念与分类1.1 链表的概念1.2 链表的分类 2、单链表的结构和定义2.1 单链表的结构2.2 单链表的定义 3、单链表的实现3.1 创建新节点3.2 头插和尾插的实现3.3 头删和尾删的实现3.4 链表的查找3.5 指定位置之前和之后插入数据3.6 删除指定位置的数据和删除指定…...

分布式光纤测温技术让森林火灾预警快人一步

2025年春季&#xff0c;多地接连发生森林火灾&#xff0c;累计过火面积超 3万公顷。春季历来是森林草原火灾易发、多发期&#xff0c;加之清明节已到来&#xff0c;生产生活用火活跃&#xff0c;民俗祭祀用火集中&#xff0c;森林火灾风险进一步加大。森林防火&#xff0c;人人…...

判断链表是否为环(Java版本自己用)

141. 环形链表 核心代码版本&#xff1a; public class Solution {public boolean hasCycle(ListNode head) {if (head null) {return false;}ListNode slow head;ListNode fast head.next;while (fast ! null && fast.next ! null) {if (slow fast) {return true…...

leetcode 516. Longest Palindromic Subsequence

题目描述&#xff1a; 代码&#xff1a; class Solution { public:int longestPalindromeSubseq(string s) {int n s.size();//i<j,dp[i][j]表示s[i,j]的最长回文子串的长度,按照这个定义dp[0][n-1]就是答案,i>j的dp[i][j]不定义vector<vector<int>> dp(n,…...

关于敏感文件或备份 安全配置错误 禁止通过 URL 访问 Vue 项目打包后的 .gz 压缩文件

要禁止通过 URL 访问 Vue 项目打包后的 .gz 压缩文件&#xff08;如 sc.6abb69d9.css.gz&#xff09;或其他敏感文件&#xff0c;可以通过 Nginx 配置和 Tomcat 配置双重防护来实现。以下是具体解决方案&#xff1a; 方法 1&#xff1a;通过 Nginx 配置禁止访问 .gz 文件 在 N…...

Linux系统启动全流程解析:从BIOS到用户登录

摘要 深度解析Linux系统启动五阶段&#xff1a;内核加载→init进程初始化→系统服务启动→终端创建→用户登录&#xff0c;涵盖SysV/Systemd差异及运行级别管理&#xff0c;提供故障排查指南。 一、启动流程全景概览 Linux系统启动过程严格遵循5个阶段顺序执行&#xff0c;每…...

unity动态骨骼架设+常用参数分享(包含部分穿模解决方案)

Unity骨骼物理模拟插件Dynamic Bone Dynamic Bone 可用于对角色的骨骼&#xff08;bones&#xff09;或者铰链系统&#xff08;joints&#xff09;施加物理效果。 物理效果可以使得游戏角色的头发、衣服、胸部或者是其他的任何部位&#xff0c;都可以以近似真实的状态运动。 …...

【云原生】k8s集群部署最新版ELFK日志采集平台

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Golang开…...

基于瑞芯微RK3576国产ARM八核2.2GHz A72 工业评估板——ROS2系统使用说明

前 言 本文主要介绍创龙科技TL3576-MiniEVM评估板演示基于Ubuntu的ROS系统(版本:ROS2 Foxy)使用说明,包括镜像编译、镜像替换,以及ROS系统测试的方法。适用开发环境如下。 Windows开发环境:Windows 10 64bit Linux虚拟机环境:VMware16.2.5、Ubuntu22.04.5 64bit U-B…...

android studio sdk unavailable和Android 安装时报错:SDK emulator directory is missing

md 网上说的都是更换proxy代理什么的&#xff0c;还有一些二其他乱七八糟的&#xff0c;根本没用&#xff0c;感觉很多就是解决不了问题&#xff0c;还贼多贼一致&#xff0c;同质化&#xff0c;感觉很坑人&#xff0c;让人觉得他们和我的一样的&#xff0c;大家都是按他们说的…...

qemu构建arm环境(AI生成)

要编译 qemu-system-arm&#xff0c;你需要安装一些依赖库&#xff0c;配置编译环境&#xff0c;并执行编译过程。以下是一般步骤&#xff0c;适用于大多数基于Linux的系统。 1. 安装依赖 首先&#xff0c;你需要安装一些必要的开发工具和库。你可以使用包管理器来安装这些依…...

10天学会嵌入式技术之51单片机-day-4

第十二章 中断系统 中断系统是单片机用于处理外部紧急事件的一种机制。中断系统工作的大致流程如下 图所示&#xff1a;当 CPU 正在处理某项任务时&#xff0c;外部发生了某个紧急事件&#xff0c;此时 CPU 会暂停当前 的工作&#xff0c;转而去处理这个紧急事件&#xff0c;处…...

spark—SQL3

连接方式 内嵌Hive&#xff1a; 使用时无需额外操作&#xff0c;但实际生产中很少使用。 外部Hive&#xff1a; 在虚拟机下载相关配置文件&#xff0c;在spark-shell中连接需将hive-site.xml拷贝到conf/目录并修改url、将MySQL驱动copy到jars/目录、把core-site.xml和hdfs-sit…...

CENTOS 7 安装VNC

一、VNC简介 VNC&#xff08;Virtual Network Computing&#xff09;&#xff0c;为一种使用RFB协议的屏幕画面分享及远程操作软件。此软件借由网络&#xff0c;可发送键盘与鼠标的动作及即时的屏幕画面。 VNC与操作系统无关&#xff0c;因此可跨平台使用&#xff0c;例如可用…...

第42讲:走进智慧农业的“感知神经系统”——农田遥感 + 边缘计算的融合实践

目录 ✨一、为什么要融合遥感与边缘计算? 🧪二、典型应用场景案例 ✅ 案例 1:棉花田的智能水分监测系统 ✅ 案例 2:水稻纹枯病自动识别与预警系统 💻三、关键技术框架与实现思路 🚦 1. 系统架构流程图: 📦 2. 模型部署建议: 💡四、未来发展趋势展望 �…...

Dify忘记管理员密码,重置的问题

今天本地win10电脑&#xff0c;使用源码启动dify&#xff0c;忘记了管理员账号和密码&#xff0c;于是网上查找解决办法。 1.有的网上资料说是去数据库删除用户表&#xff0c;于是进入数据库&#xff1a; docker exec -it docker-db-1 psql -U postgres -d dify 找到postgre…...

C#—Lazy<T> 类型(延迟初始化/懒加载模式)

C# 的 Lazy<T> 类型 Lazy<T> 是 C# 中的一个类&#xff0c;用于实现延迟初始化&#xff08;懒加载&#xff09;模式。它提供了一种线程安全的方式来延迟创建大型或资源密集型对象&#xff0c;直到第一次实际需要时才进行初始化。 主要特点 延迟初始化&#xff1a…...