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

设计模式C++

针对一些经典的常见的场景, 给定了一些对应的解决方案,这个就叫设计模式。

设计模式的作用:使代码的可重用性高,可读性强,灵活性好,可维护性强。

设计原则:

单一职责原则:一个类只做一方面的事。

开闭原则:以前写过的代码不能动,修改以前写的代码是非常危险的事情,我们可以在原来的基础上进行扩展,例如添加新的方法。

接口隔离原则:接口定义的功能尽量少,不要包含太多的功能。

里氏替换原则:在继承关系的代码开发中,如果需要进行功能的扩展,不要在子类中改变父类中已经实现的方法,而是通过新增方法来扩展父类的功能。

依赖倒置原则:在定义类的成员变量,参数类型,返回值类型的时候,不要写某个具体的实现类,而是尽量采用接口或者抽象类,这样后续如果我们想改,不需要改动代码,只需要增加实现类就可以了。

创建型模式:

创建型模式:用于解耦对象实例化的过程。

工厂模式:

工厂模式的思想是将对象的创建逻辑封装到一个专门的类中,客户端无需直接 new 具体类,从而降低代码耦合。

当对象创建逻辑复杂,或需要统一管理创建过程时使用工厂模式。

#include <iostream>// 抽象产品类(接口)
class Shape {
public:virtual void draw() = 0;virtual ~Shape() {} // 虚析构,确保正确释放子类对象
};// 具体产品类:圆形
class Circle : public Shape {
public:void draw() override {std::cout << "Drawing a Circle" << std::endl;}
};// 具体产品类:方形
class Square : public Shape {
public:void draw() override {std::cout << "Drawing a Square" << std::endl;}
};
简单工厂模式:

定义抽象产品类,具体产品类,工厂类,用户不必知道创建对象的细节,只需要调用工厂类(静态创建对象函数)。(针对单一产品)

违反了开闭原则,新增产品类需要修改工厂类的代码。

// 工厂类
class ShapeFactory {
public:// 根据类型创建对象(静态方法)static Shape* createShape(const std::string& type) {if (type == "Circle") {return new Circle();} else if (type == "Square") {return new Square();}return nullptr; // 无效类型返回空}
};// 客户端代码
int main() {// 通过工厂创建对象Shape* circle = ShapeFactory::createShape("Circle");Shape* square = ShapeFactory::createShape("Square");circle->draw(); // 输出: Drawing a Circlesquare->draw(); // 输出: Drawing a Squaredelete circle;delete square;return 0;
}
工厂方法模式:

创建抽象工厂类,每一个产品对应一个产品工厂。

// 抽象工厂
class ShapeFactory {
public:virtual Shape* createShape() = 0;virtual ~ShapeFactory() {}
};// 圆形工厂
class CircleFactory : public ShapeFactory {
public:Shape* createShape() override {return new Circle();}
};// 方形工厂
class SquareFactory : public ShapeFactory {
public:Shape* createShape() override {return new Square();}
};// 客户端使用
ShapeFactory* factory = new CircleFactory();
Shape* shape = factory->createShape();
抽象工厂模式:

针对 多个产品族 的创建

#include <iostream>// ----------------- 抽象产品接口 -----------------
// 抽象按钮
class Button {
public:virtual void render() = 0;virtual ~Button() {}
};// 抽象复选框
class Checkbox {
public:virtual void check() = 0;virtual ~Checkbox() {}
};// ----------------- 具体产品实现 -----------------
// Windows 按钮
class WindowsButton : public Button {
public:void render() override {std::cout << "Windows 风格按钮渲染" << std::endl;}
};// Windows 复选框
class WindowsCheckbox : public Checkbox {
public:void check() override {std::cout << "Windows 复选框被勾选" << std::endl;}
};// Mac 按钮
class MacButton : public Button {
public:void render() override {std::cout << "Mac 风格按钮渲染" << std::endl;}
};// Mac 复选框
class MacCheckbox : public Checkbox {
public:void check() override {std::cout << "Mac 复选框被勾选" << std::endl;}
};// ----------------- 抽象工厂接口 -----------------
class GUIFactory {
public:virtual Button* createButton() = 0;virtual Checkbox* createCheckbox() = 0;virtual ~GUIFactory() {}
};// ----------------- 具体工厂实现 -----------------
class WindowsFactory : public GUIFactory {
public:Button* createButton() override {return new WindowsButton();}Checkbox* createCheckbox() override {return new WindowsCheckbox();}
};class MacFactory : public GUIFactory {
public:Button* createButton() override {return new MacButton();}Checkbox* createCheckbox() override {return new MacCheckbox();}
};// ----------------- 客户端代码 -----------------
int main() {// 假设根据当前系统选择工厂GUIFactory* factory;// 模拟配置:选择 Windows 或 Mac 工厂std::string os = "Windows";if (os == "Windows") {factory = new WindowsFactory();} else {factory = new MacFactory();}// 使用工厂创建一组组件Button* button = factory->createButton();Checkbox* checkbox = factory->createCheckbox();button->render();    // 输出对应系统的按钮渲染checkbox->check();   // 输出对应系统的复选框行为delete factory;delete button;delete checkbox;return 0;
}

简单工厂 vs 工厂方法 vs 抽象工厂?

  • 简单工厂:一个工厂类负责所有产品。

  • 工厂方法:每个产品对应一个工厂子类。

  • 抽象工厂:生产一个产品家族(例如不同风格的 UI 组件)。

单例模式:

单例设计模式(Singleton Pattern) 是一种创建型设计模式,用于确保一个类只有一个实例,并提供一个全局访问点来访问该实例。单例模式无法被回收,他的生命周期随进程,可以手动释放或者使用智能指针进行管理。

饿汉模式

饿汉模式:饿汉非常简单,定义静态实例,静态方法在加载到内存时就全部加载出来,缺陷是如果很大启动时就会花很长时间。

class Singleton {
private:static Singleton instance; // 静态实例Singleton() {} // 私有构造函数// 禁止拷贝构造函数和赋值操作符,防止拷贝Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;public:static Singleton* getInstance() {return &instance; // 直接返回静态实例的地址}
};// 在类外部初始化静态实例
Singleton Singleton::instance;
懒汉模式

懒汉模式:懒汉的核心思想是“延迟加载”,使用时再创建实例,使用双重检查锁确保线程安全和同步开销。

#include <mutex>class Singleton {
private:static Singleton* instance; // 静态实例指针static std::mutex mutex; // 互斥锁,用于线程同步Singleton() {} // 私有构造函数// 禁止拷贝构造函数和赋值操作符,防止拷贝Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;public:static Singleton* getInstance() {if (instance == nullptr) { // 双重检查锁定(Double-Checked Locking)std::lock_guard<std::mutex> lock(mutex); // 加锁if (instance == nullptr) { // 再次检查实例是否已创建instance = new Singleton(); // 如果未创建,则创建实例}}return instance; // 返回实例的地址}
};// 在类外部初始化静态实例指针和互斥锁
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mutex;
Meyer's Singleton

使用静态局部变量实现的单例模式。静态局部变量的初始化是线程安全的。编译器会确保静态局部变量只被初始化一次,即使多个线程同时调用 getInstance()。同时避免了资源浪费。实现简单,是现代 C++ 中推荐的单例实现方式。

class Singleton {
private:Singleton() {} // 私有构造函数Singleton(const Singleton&) = delete; // 禁止拷贝构造Singleton& operator=(const Singleton&) = delete; // 禁止赋值操作public:static Singleton& getInstance() {static Singleton instance; // 静态局部变量return instance;}void doSomething() {std::cout << "Singleton is doing something!" << std::endl;}
};
应用场景: 

线程池,内存池

结构型模式:

结构型模式:把类和对象结合在一起形成一个更大的结构。

行为型模式:

行为性模式:类和对象如何交互,划分责任和算法。

策略模式:

允许使用者根据不同的情况选择不同的策略(算法或行为)执行。

  1. 抽象策略接口(SortStrategy
    定义所有具体策略必须实现的方法(如 sort())。

  2. 具体策略类(BubbleSortQuickSort
    实现具体的算法逻辑。

  3. 上下文类(Sorter

    • 持有策略对象的引用(通过组合关系)。

    • 提供设置策略的方法(setStrategy())和执行策略的方法(executeSort())。

#include <iostream>
#include <vector>
#include <memory>// ----------------- 1. 抽象策略接口 -----------------
class SortStrategy {
public:virtual void sort(std::vector<int>& data) = 0;virtual ~SortStrategy() {} // 虚析构确保正确释放资源
};// ----------------- 2. 具体策略类 -----------------
// 冒泡排序策略
class BubbleSort : public SortStrategy {
public:void sort(std::vector<int>& data) override {std::cout << "使用冒泡排序" << std::endl;// 实现冒泡排序逻辑...}
};// 快速排序策略
class QuickSort : public SortStrategy {
public:void sort(std::vector<int>& data) override {std::cout << "使用快速排序" << std::endl;// 实现快速排序逻辑...}
};// ----------------- 3. 上下文类(Context) -----------------
class Sorter {
private:std::unique_ptr<SortStrategy> strategy; // 使用智能指针管理策略对象public:// 设置策略void setStrategy(std::unique_ptr<SortStrategy> newStrategy) {strategy = std::move(newStrategy);}// 执行排序void executeSort(std::vector<int>& data) {if (strategy) {strategy->sort(data);} else {std::cout << "未设置排序策略!" << std::endl;}}
};// ----------------- 客户端代码 -----------------
int main() {Sorter sorter;std::vector<int> data = {5, 2, 7, 1, 3};// 动态切换策略sorter.setStrategy(std::make_unique<BubbleSort>());sorter.executeSort(data); // 输出:使用冒泡排序sorter.setStrategy(std::make_unique<QuickSort>());sorter.executeSort(data); // 输出:使用快速排序return 0;
}
应用场景:

游戏中的角色行为:角色根据状态切换攻击、防御、逃跑策略。

动态使用不同的算法。

观察者模式:

定义对象间的一对多依赖关系,当一个对象(主题)状态改变时,所有依赖它的对象(观察者)会自动收到通知并更新。

应用场景:订阅-通知机制,实现松耦合的一对多事件处理。比如气象观测,观测机器观察到了数据,通知各类的软件。

中介者模式:

用一个中介对象(Mediator)来封装一组对象(Colleague)之间的交互,从而减少对象间的直接耦合。所有对象通过中介者通信,而不是直接相互引用。

应用场景:聊天室

模版模式:

在父类中定义一个规定了算法的执行步骤和顺序的模板方法,声明为 final,再将算法中的步骤声明为抽象方法或虚函数,由子类具体实现。

#include <iostream>// 抽象基类:定义饮料制作的模板
class Beverage {
public:// 模板方法(final 禁止子类修改流程)void prepareBeverage() final {boilWater();brew();addCondiments();pourInCup();}protected:// 具体步骤由子类实现virtual void brew() = 0;virtual void addCondiments() = 0;// 公共步骤(直接复用)void boilWater() {std::cout << "煮沸水" << std::endl;}void pourInCup() {std::cout << "倒入杯子" << std::endl;}virtual ~Beverage() = default;
};// 具体子类:咖啡
class Coffee : public Beverage {
protected:void brew() override {std::cout << "冲泡咖啡粉" << std::endl;}void addCondiments() override {std::cout << "加糖和牛奶" << std::endl;}
};// 具体子类:茶
class Tea : public Beverage {
protected:void brew() override {std::cout << "浸泡茶叶" << std::endl;}void addCondiments() override {std::cout << "加柠檬" << std::endl;}
};// 客户端代码
int main() {Beverage* coffee = new Coffee();coffee->prepareBeverage();// 输出:// 煮沸水// 冲泡咖啡粉// 加糖和牛奶// 倒入杯子Beverage* tea = new Tea();tea->prepareBeverage();// 输出:// 煮沸水// 浸泡茶叶// 加柠檬// 倒入杯子delete coffee;delete tea;return 0;
}
应用场景:

比如餐厅服务员的游戏,制作可乐,雪碧什么的饮料都是一样的步骤,就可以设定一个制作饮料的类,里面规定制作饮料的步骤。

相关文章:

设计模式C++

针对一些经典的常见的场景, 给定了一些对应的解决方案&#xff0c;这个就叫设计模式。 设计模式的作用&#xff1a;使代码的可重用性高&#xff0c;可读性强&#xff0c;灵活性好&#xff0c;可维护性强。 设计原则&#xff1a; 单一职责原则&#xff1a;一个类只做一方面的…...

使用 Excel 实现绩效看板的自动化

引言 在日常工作中&#xff0c;团队的绩效监控和管理是确保项目顺利进行的重要环节。然而&#xff0c;面临着以下问题&#xff1a; ​数据分散&#xff1a;系统中的数据难以汇总&#xff0c;缺乏一个宏观的团队执行情况视图。​看板缺失&#xff1a;系统本身可能无法提供合适…...

ngx_openssl_conf_t

ngx_openssl_conf_t 定义在 src\event\ngx_event_openssl.c typedef struct {ngx_uint_t engine; /* unsigned engine:1; */ } ngx_openssl_conf_t; 1. 这个结构体的目的是存储与 OpenSSL 引擎相关的配置信息。 2. engine 字段用于标识是否启用 OpenSSL 的硬件加速引擎…...

深度学习环境配置指令大全

文章目录 环境配置官网/博客合集清华镜像站anaconda官网pytorch官网pytorch历史库官网pytorch与cuda对应版本下载博客torch与torchvision与python对应关系python与pytorch对应关系 环境相关创建环境激活环境退出环境删除环境检查环境冲突 安装相关安装requirementsconda安装con…...

Netty启动源码NioEventLoop剖析accept剖析read剖析write剖析

学习链接 NIO&Netty - 专栏 Netty核心技术十–Netty 核心源码剖析Netty核心技术九–TCP 粘包和拆包及解决方案Netty核心技术七–Google ProtobufNetty核心技术六–Netty核心模块组件Netty核心技术五–Netty高性能架构设计 聊聊Netty那些事儿 - 专栏 一文搞懂Netty发送数…...

<03.13>八股文补充知识

import java.lang.reflect.*; public class Main {public static void main(String[] args) throws Exception {// 获取 Class 对象//1. 通过类字面量Class<?> clazz Person.class;//2 通过对象实例化String str "Hello";Class<?> clazz_str str.ge…...

[HUBUCTF 2022 新生赛]messy_traffic

下载附件 看到文件类型直接用wireshark打开&#xff0c;对MySQL协议进行追踪流&#xff0c;并没有什么发现&#xff0c;后面对NO.437发现有用信息&#xff0c;http追踪流 发现**system(‘cat passwd.txt’);**这里是在打开查看passwd.txt&#xff0c;密码是"SignUpForHUBU…...

条款1:理解模版性别推导

目录 问题引出 情况1&#xff1a;ParamType是个指针或引用&#xff0c;但不是个万能引用。 情况2&#xff1a;ParamType是个万能引用 情况3&#xff1a;ParamType既非指针也非引用 问题引出 函数模板大致形如&#xff1a; template<typename T> void f(ParamType p…...

kafka连问

1&#xff0c;kafka多消费者指部署多个服务消费节点吗 2&#xff0c;多个消费节点自动组成消费组吗 3&#xff0c;消费者组与多消费节点关系 4&#xff0c;一个分区&#xff0c;多个消费者&#xff0c;可以保证有序消费吗 5&#xff0c;kafka如何实现顺序消费&#xff0c;一…...

Linux中基础开发工具详细介绍

目录 软件包管理器什么是软件包Linux软件生态 yum具体操作查看软件包安装软件卸载软件注意事项 编辑器VimLinux编辑器-vim使用vim的基本概念快速编辑的指令 编译器gcc/g背景知识gcc编译选项预处理(进行宏替换)编译&#xff08;生成汇编&#xff09;汇编&#xff08;生成机器可识…...

浅谈时钟启动和Systemlnit函数

时钟是STM32的关键&#xff0c;是整个系统的心脏&#xff0c;时钟如何启动&#xff0c;时钟源如何选择&#xff0c;各个参数如何设置&#xff0c;我们从源码来简单分析一下时钟的启动函数Systemlnit&#xff08;&#xff09;。 Systemlnit函数简介 我们先来看一下源程序的注释…...

社交软件频繁更新,UI 设计在其中扮演什么角色?

在当今数字化时代&#xff0c;社交软件已成为人们日常生活中不可或缺的一部分。随着科技的飞速发展和用户需求的不断变化&#xff0c;社交软件更新频率日益加快。在这频繁更新的背后&#xff0c;UI 设计扮演着至关重要的角色&#xff0c;它如同社交软件的 “门面担当” 与 “交…...

SQLMesh 系列教程:解锁SQLMesh的宏与变量魔法

在数据库流水线开发中&#xff0c;代码复用与动态配置是提升效率的核心诉求。SQLMesh以其独特的宏系统与用户定义变量机制&#xff0c;重新定义了SQL生成的灵活性。与传统模板引擎不同&#xff0c;SQLMesh的宏并非简单的字符串替换&#xff0c;而是基于语义理解的智能代码重构—…...

React篇之three渲染

需求&#xff1a;拖拽右侧面板&#xff0c;里面的three模型能够自适应 import { useEffect, useState, useRef } from react import ./App.css import * as THREE from three; import { GLTFLoader } from three/addons/loaders/GLTFLoader.js; import { debounce } from loda…...

PHP与前端框架的无缝集成:最佳实践与案例分析

PHP与前端框架的无缝集成&#xff1a;最佳实践与案例分析 在现代Web开发中&#xff0c;PHP作为后端语言与前端框架的集成已成为一种常见的开发模式。无论是传统的MVC架构&#xff0c;还是现代的SPA&#xff08;单页应用&#xff09;&#xff0c;PHP与前端框架的无缝集成能够显…...

Redis内存淘汰策略

Redis 是一种高性能的键值存储系统&#xff0c;广泛用于缓存、消息队列等场景。由于 Redis 数据存储在内存中&#xff0c;而内存资源有限&#xff0c;因此需要内存淘汰策略来管理内存的使用。Redis 提供了多种内存淘汰策略&#xff0c;可以根据不同的应用场景选择合适的策略。 …...

Facebook 的框架及技术栈

一、前端框架与技术 React.js 及其生态系统 核心原理与特点 React.js 是 Facebook 开源的用于构建用户界面的 JavaScript 库。它的核心概念是组件化&#xff0c;将用户界面拆分成一个个独立的、可复用的组件。每个组件都有自己的状态&#xff08;state&#xff09;和属性&#…...

QT中的布局管理

在 Qt 中&#xff0c;布局管理器&#xff08;如 QHBoxLayout 和 QVBoxLayout&#xff09;的构造函数可以接受一个 QWidget* 参数&#xff0c;用于指定该布局的父控件。如果指定了父控件&#xff0c;布局会自动将其管理的控件添加到父控件中。 在你的代码中&#xff0c;QHBoxLa…...

如何学习VBA_3.2.20:DTP与Datepicker实现日期的输入

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的劳动效率&#xff0c;而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册&#xff0c;现在已经全部完成&#xff0c;希望大家利用、学习。 如果…...

在 LaTeX 中强制表格位于页面顶部

在 LaTeX 中强制表格位于页面顶部&#xff0c;可以通过以下 多种方法结合使用&#xff0c;按优先级推荐&#xff1a; 方法 1&#xff1a;使用 [!t] 位置限定符 原理&#xff1a;通过 [!t] 强制 LaTeX 优先将表格放置在页面顶部&#xff08;Top&#xff09;&#xff0c;! 表示忽…...

dify+mysql的诗词助手

目录 数据库表结构&#xff1a; 数据库查询的http服务搭建&#xff1a; 流程引擎搭建&#xff1a; 开始&#xff0c; HTTP查询数据库&#xff0c; LLM数据分析&#xff0c; 直接回复&#xff0c; 效果测试&#xff1a; 下载链接&#xff1a; 数据库表结构&#xff1a;…...

PyTorch 入门学习

目录 PyTorch 定义 核心作用 应用场景 Pytorch 基本语法 1. 张量的创建 2. 张量的类型转换 3. 张量数值计算 4. 张量运算函数 5. 张量索引操作 6. 张量形状操作 7. 张量拼接操作 8. 自动微分模块 9. 案例-线性回归案例 PyTorch 定义 PyTorch 是一个基于 Python 深…...

【视频】SRS将RTMP转WebRTC、HLS流;获取RTSP转其它流

1、安装依赖库 sudo apt install tclsh sudo apt install cmake sudo apt install autotools-dev automake m4 perl sudo apt install libtool2、源码安装 1)下载源码 https://github.com/ossrs/srs/releases/tag/v5.0-r32)配置、编译 ./configure && make -j83、…...

linux中如何查询文件夹大小

在 Linux 中&#xff0c;可以使用 du 命令查看文件夹大小。以下是常用方法&#xff1a; 标题1. 查看文件夹大小 du -sh /path/to/directory-s&#xff1a;显示总大小。 -h&#xff1a;以易读格式&#xff08;如 KB、MB、GB&#xff09;显示大小。 标题2&#xff1a;查看文件…...

MySQL增删改查操作 -- CRUD

个人主页&#xff1a;顾漂亮 目录 1.CRUD简介 2.Create新增 使用示例&#xff1a; 注意点&#xff1a; 3.Retrieve检索 使用示例&#xff1a; 注意点&#xff1a; 4.where条件查询 前置知识&#xff1a;-- 运算符 比较运算符 使用示例&#xff1a; 注意点&#xf…...

uniapp+Vue3 组件之间的传值方法

一、父子传值&#xff08;props / $emit 、ref / $refs&#xff09; 1、props / $emit 父组件通过 props 向子组件传递数据&#xff0c;子组件通过 $emit 触发事件向父组件传递数据。 父组件&#xff1a; // 父组件中<template><view class"container">…...

TDengine SQL 函数

单行函数 数学函数 ABSACOSASINATANCEILCOSDEGREESEXPFLOORGREATESTLEASTLNLOGMODPIPOWRADIANSRANDROUNDSIGNSINSQRTTANTRUNCATE 字符串函数 ASCIICHARCHAR_LENGTHCONCATCONCAT_WSLENGTHLOWERLTRIMPOSITIONREPEATREPLACERTRIMSUBSTRING/SUBSTRSUBSTRING_INDEXTRIMUPPER 转换函数…...

智能三防手持终端破解传统仓储效率困局

在数字化浪潮的推动下&#xff0c;传统仓储管理模式正面临效率低、成本高、错误频发等瓶颈。如何实现精准、高效、智能化的仓储管理&#xff0c;上海岳冉三防智能手持终端机以RFID技术为核心&#xff0c;结合工业级三防&#xff08;防水、防摔、防尘&#xff09;设计&#xff0…...

力扣——K个一组翻转链表

题目链接&#xff1a; 链接 题目描述&#xff1a; 思路&#xff1a; 可以理解为把原链表的每一段进行反转 把链表的每一段看成新链表&#xff0c;单独进行反转&#xff0c;然后再放回原链表 关键是截取k个节点、进行反转后&#xff0c;怎么再和原链表链接起来 我们把截取的…...

5-27 临摹大师-IP-Adapter

前言&#xff1a; 前一节我们主要介绍ControlNet中如何对黑白照片进行上色 主要介绍ControlNet中的IP-Adapter。这个也是一种类似的风格借鉴&#xff0c;类似Reference的能力。 当然IP-Adapter有两点或许可以吸引我们&#xff0c;一个是国人腾讯公司制作的。另一个在速度和效…...

MinIO的预签名直传机制

我们传统使用MinIo做OSS对象存储的应用方式往往都是在后端配置与MinIO的连接和文件上传下载的相关接口&#xff0c;然后我们在前端调用这些接口完成文件的上传下载机制&#xff0c;但是&#xff0c;当并发量过大&#xff0c;频繁访问会对后端的并发往往会对服务器造成极大的压力…...

树莓科技集团董事长:第五代产业园运营模式的深度剖析与展望​

第五代产业园运营模式&#xff0c;以创新为核心驱动&#xff0c;强调数字化、网络化和资源整合。树莓科技集团在这一领域具有代表性&#xff0c;其运营模式值得深入剖析。 核心特征 数字化转型&#xff1a;第五代产业园高度重视数字化技术的应用&#xff0c;通过构建数字化平…...

项目组织管理类型-职能式组织和矩阵式组织的区别

在职能式组织和矩阵式组织中&#xff0c;任务分配和人员安排确实有显著的不同&#xff0c;让我们通过以下例子来进一步解释&#xff1a; 职能式组织在职能式组织中&#xff0c;任务通常是根据部门的职能进行下达的。 例如&#xff0c;一家制造公司的组织结构如下&#xff1a; …...

树莓科技(成都)集团:如何铸就第五代产业园标杆

树莓科技&#xff08;成都&#xff09;集团铸就第五代产业园标杆&#xff0c;主要体现在以下几个方面&#xff1a; 精准定位与前瞻布局 树莓科技并非盲目扩张&#xff0c;而是精准锚定数字经济发展方向。以成都为起点&#xff0c;迅速构建起全国性的园区版图&#xff0c;体现…...

【Quest开发】手柄交互震动

软件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72&#xff08;要提前导入哦&#xff09; 硬件&#xff1a;Meta Quest3 参考Meta开发文档&#xff1a;https://developers.meta.com/horizon/documentation/unity/unity-haptics-sdk-integrate 这篇官…...

《Transformer如何进行图像分类:从新手到入门》

引言 如果你对人工智能&#xff08;AI&#xff09;或深度学习&#xff08;Deep Learning&#xff09;感兴趣&#xff0c;可能听说过“Transformer”这个词。它最初在自然语言处理&#xff08;NLP&#xff09;领域大放异彩&#xff0c;比如在翻译、聊天机器人和文本生成中表现出…...

数字图像处理与Python语言实现-Box模糊CUDA实现

Box模糊CUDA实现 文章目录 Box模糊CUDA实现1、Box模糊的基本原理2、算法优化:滑动窗口技术3、参数对模糊效果的影响4、Box模糊的优缺点5、与高斯模糊的对比6、实际应用场景7、算法实现7.1 PyCUDA实现7.2 CuPy实现7.3 C++与CUDA实现8、总结在图像处理领域,**Box模糊(方框模糊…...

MAVEN解决版本依赖冲突

文章目录 一、依赖冲突概念1、什么是依赖冲突2、依赖冲突的原因3、如何解决依赖冲突 二、查看依赖冲突-maven-helper1、安装2、helper使用1、conflicts的阅读顺序&#xff08;从下向上看&#xff09;2、dependencies as List的阅读顺序&#xff08;从下向上看&#xff09;3、de…...

Compose 实践与探索五 —— AnimationSpec

不论是 animateXxxAsState() 还是 Animatable 的 animateTo() 都可以传入 AnimationSpec 以配置动画的规格&#xff1a; Composable fun animateDpAsState(targetValue: Dp,animationSpec: AnimationSpec<Dp> dpDefaultSpring,label: String "DpAnimation",…...

Embedding模型到底是什么?

嵌入模型&#xff08;Embedding Model&#xff09;是一种将高维数据映射到低维空间的工具&#xff0c;广泛应用于自然语言处理&#xff08;NLP&#xff09;、推荐系统和图像识别等领域。它的核心目标是将复杂的数据&#xff08;如文本、图像或用户行为&#xff09;转换为稠密的…...

数据结构(一)——绪论

一、数据结构的研究内容 1.数据的各种逻辑结构和物理结构&#xff0c;以及他们之间的相应关系 2.存储结构的方法&#xff0c;对每种结构定义相适应的各种运算 3.设计出相应的算法 4.分析算法的效率 二、数据结构的基本概念 1.数据&#xff08;data&#xff09;&#xff1a…...

VMware虚拟机网络连接模式介绍以及nat模式访问公网实践

在 VMware 虚拟机中&#xff0c;网络配置是非常重要的一部分。VMware 提供了三种主要的网络连接模式&#xff0c;分别是桥接模式&#xff08;Bridged&#xff09;、NAT模式&#xff08;NAT&#xff09; 和仅主机模式&#xff08;Host-Only&#xff09;。每种模式都有其特定的用…...

Selenium Manager和webdriver manager的区别与联系

一、引言 1.1 自动化测试的重要性 在现代软件开发流程中&#xff0c;自动化测试已经成为保证软件质量和提高交付效率的关键实践。随着软件开发周期的缩短和软件复杂性的增加&#xff0c;手工测试已无法满足快速迭代的需求。自动化测试能够快速、准确地执行重复性测试任务&…...

八叉树地图的原理与实现

八叉树与体素图 八叉树地图 八叉树地图是可变分辨率的三维栅格地图&#xff0c;可以自由调整分辨率&#xff0c;如下所示&#xff1a; 根据点云的数量或密度决定每个叶子方块是否被占据 体素图 体素就是固定分辨率的三维栅格地图&#xff0c;如下所示&#xff1a; 根据点云…...

DeepSeek模型本地化部署方案及Python实现

DeepSeek实在是太火了&#xff0c;虽然经过扩容和调整&#xff0c;但反应依旧不稳定&#xff0c;甚至小圆圈转半天最后却提示“服务器繁忙&#xff0c;请稍后再试。” 故此&#xff0c;本文通过讲解在本地部署 DeepSeek并配合python代码实现&#xff0c;让你零成本搭建自己的AI…...

【Linux】浅谈冯诺依曼和进程

一、冯诺依曼体系结构 冯诺依曼由 输入设备、输出设备、运算器、控制器、存储器 五部分组成。 冯诺依曼的设计特点 二进制表示 所有数据&#xff08;包括程序指令&#xff09;均以二进制形式存储和运算&#xff0c;简化了硬件逻辑设计&#xff0c;提高了可靠性。 存储程序原理…...

基于深度学习的多模态人脸情绪识别研究与实现(视频+图像+语音)

这是一个结合图像和音频的情绪识别系统&#xff0c;从架构、数据准备、模型实现、训练等。包括数据收集、预处理、模型训练、融合方法、部署优化等全流程。确定完整系统的组成部分&#xff1a;数据收集与处理、模型设计与训练、多模态融合、系统集成、部署优化、用户界面等。详…...

【蓝桥杯】第15届c++B组--R格式

问题描述 小蓝最近在研究一种浮点数的表示方法&#xff1a;RR 格式。对于一个大于 0 的浮点数 dd&#xff0c;可以用 RR 格式的整数来表示。给定一个转换参数 nn&#xff0c;将浮点数转换为 RR 格式整数的做法是: 将浮点数乘以 2n2n&#xff1b; 四舍五入到最接近的整数。 …...

【初阶三】认识C语言—下

【初阶三】认识C语言—下 1.函数2.数组3.操作符3.1算数操作符3.2移位操作符和位操作符3.3赋值操作符3.4单目操作符 4.常见关键字4.1关键字typedef4.2 关键字static 5. define定义常宏6.指针6.1内存6.2取地址操作符& 7.结构体 1.函数 函数就像一个工厂&#xff0c;通过输入原…...

【C#】使用DeepSeek帮助评估数据库性能问题,C# 使用定时任务,每隔一分钟移除一次表,再重新创建表,和往新创建的表追加5万多条记录

&#x1f339;欢迎来到《小5讲堂》&#x1f339; &#x1f339;这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。&#x1f339; &#x1f339;温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01;&#…...