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

设计模式全解析:23种经典设计模式及其应用

创建型模式

1. 单例模式(Singleton Pattern)

  • 核心思想:确保一个类只有一个实例,并提供一个全局访问点。
  • 适用场景:需要共享资源的场景,如配置管理、日志记录等。
public class Singleton {// 静态变量保存单例实例private static Singleton instance;// 私有构造函数,防止外部实例化private Singleton() {}// 提供获取实例的全局访问点public static Singleton getInstance() {if (instance == null) { // 如果实例为空,则创建instance = new Singleton();}return instance; // 返回单例实例}
}

2. 工厂方法模式(Factory Method Pattern)

  • 核心思想:定义一个创建对象的接口,但由子类决定实例化哪一个类。
  • 适用场景:需要延迟到子类进行对象实例化时。
// 产品接口
interface Product {}// 具体产品类
class ConcreteProduct implements Product {}// 工厂接口
interface Creator {Product factoryMethod(); // 工厂方法,用于创建产品
}// 具体工厂类
class ConcreteCreator implements Creator {public Product factoryMethod() {return new ConcreteProduct(); // 返回具体产品实例}
}

3. 抽象工厂模式(Abstract Factory Pattern)

  • 核心思想:提供一个接口,创建一系列相关或依赖对象,而无需指定具体类。
  • 适用场景:需要创建一组相关或互相依赖的对象时。
// 抽象产品A
interface ProductA {}// 抽象产品B
interface ProductB {}// 具体产品A1
class ProductA1 implements ProductA {}// 具体产品B1
class ProductB1 implements ProductB {}// 抽象工厂接口
interface AbstractFactory {ProductA createProductA(); // 创建产品A的方法ProductB createProductB(); // 创建产品B的方法
}// 具体工厂1
class ConcreteFactory1 implements AbstractFactory {public ProductA createProductA() {return new ProductA1(); // 创建具体产品A1}public ProductB createProductB() {return new ProductB1(); // 创建具体产品B1}
}

4. 建造者模式(Builder Pattern)

  • 核心思想:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
  • 适用场景:需要构建复杂对象时,且构建过程独立于表示。
// 产品类
class Product {private String partA;private String partB;// 设置部件Apublic void setPartA(String partA) {this.partA = partA;}// 设置部件Bpublic void setPartB(String partB) {this.partB = partB;}
}// 建造者接口
interface Builder {void buildPartA(); // 构建部件Avoid buildPartB(); // 构建部件BProduct getResult(); // 获取构建的产品
}// 具体建造者
class ConcreteBuilder implements Builder {private Product product = new Product();public void buildPartA() {product.setPartA("PartA"); // 设置产品的部件A}public void buildPartB() {product.setPartB("PartB"); // 设置产品的部件B}public Product getResult() {return product; // 返回构建的产品}
}

5. 原型模式(Prototype Pattern)

  • 核心思想:通过复制现有实例来创建新对象,避免重复初始化。
  • 适用场景:需要大量相似对象时。
// 原型类
class Prototype implements Cloneable {// 克隆方法public Prototype clone() throws CloneNotSupportedException {return (Prototype) super.clone(); // 调用父类的克隆方法}
}

结构型模式

6. 适配器模式(Adapter Pattern)

  • 核心思想:将一个类的接口转换成客户期望的另一个接口。
  • 适用场景:接口不兼容但需要协同工作的类。
// 目标接口
interface Target {void request();
}// 被适配的类
class Adaptee {void specificRequest() {// 特殊请求}
}// 适配器类
class Adapter implements Target {private Adaptee adaptee;public Adapter(Adaptee adaptee) {this.adaptee = adaptee;}public void request() {adaptee.specificRequest(); // 转发请求到被适配对象}
}

7. 桥接模式(Bridge Pattern)

  • 核心思想:将抽象部分与实现部分分离,使它们可以独立变化。
  • 适用场景:需要跨越多个平台的对象。
// 实现接口
interface Implementor {void operationImpl();
}// 具体实现类A
class ConcreteImplementorA implements Implementor {public void operationImpl() {// 具体实现}
}// 抽象类
abstract class Abstraction {protected Implementor implementor;protected Abstraction(Implementor implementor) {this.implementor = implementor;}public abstract void operation(); // 抽象方法
}// 扩展抽象类
class RefinedAbstraction extends Abstraction {public RefinedAbstraction(Implementor implementor) {super(implementor);}public void operation() {implementor.operationImpl(); // 调用实现方法}
}

8. 组合模式(Composite Pattern)

  • 核心思想:将对象组合成树形结构以表示“部分-整体”的层次结构。
  • 适用场景:需要处理树形结构数据时。
// 组件接口
interface Component {void operation();
}// 叶子节点
class Leaf implements Component {public void operation() {// 叶子节点的操作}
}// 组合节点
class Composite implements Component {private List<Component> children = new ArrayList<>();// 添加子节点public void add(Component component) {children.add(component);}public void operation() {for (Component child : children) {child.operation(); // 递归调用子节点的操作}}
}

9. 装饰器模式(Decorator Pattern)

  • 核心思想:动态地给对象添加一些额外的职责。
  • 适用场景:需要扩展类的功能时。
// 组件接口
interface Component {void operation();
}// 具体组件
class ConcreteComponent implements Component {public void operation() {// 基本操作}
}// 装饰器抽象类
abstract class Decorator implements Component {protected Component component;protected Decorator(Component component) {this.component = component;}public void operation() {component.operation(); // 调用被装饰对象的操作}
}// 具体装饰器
class ConcreteDecorator extends Decorator {public ConcreteDecorator(Component component) {super(component);}public void operation() {super.operation();// 添加额外的操作}
}

10. 外观模式(Facade Pattern)

  • 核心思想:为子系统中的一组接口提供一个一致的界面。
  • 适用场景:简化复杂系统的使用。
// 子系统A
class SubsystemA {void operationA() {// 子系统A的操作}
}// 子系统B
class SubsystemB {void operationB() {// 子系统B的操作}
}// 外观类
class Facade {private SubsystemA subsystemA = new SubsystemA();private SubsystemB subsystemB = new SubsystemB();// 提供的统一接口void operation() {subsystemA.operationA(); // 调用子系统A的方法subsystemB.operationB(); // 调用子系统B的方法}
}

11. 享元模式(Flyweight Pattern)

  • 核心思想:运用共享技术有效地支持大量细粒度对象。
  • 适用场景:需要大量创建对象时,减少内存消耗。
// 享元类
class Flyweight {private String intrinsicState; // 内部状态public Flyweight(String intrinsicState) {this.intrinsicState = intrinsicState;}// 操作方法,传入外部状态void operation(String extrinsicState) {// 使用内部状态和外部状态}
}// 享元工厂
class FlyweightFactory {private Map<String, Flyweight> flyweights = new HashMap<>();// 获取享元对象public Flyweight getFlyweight(String key) {if (!flyweights.containsKey(key)) {flyweights.put(key, new Flyweight(key)); // 创建新享元对象}return flyweights.get(key); // 返回享元对象}
}

12. 代理模式(Proxy Pattern)

  • 核心思想:为其他对象提供一种代理,以控制对这个对象的访问。
  • 适用场景:需要控制对象访问权限时。
// 抽象主题
interface Subject {void request();
}// 真实主题
class RealSubject implements Subject {public void request() {// 真实请求的处理}
}// 代理类
class Proxy implements Subject {private RealSubject realSubject;public void request() {if (realSubject == null) {realSubject = new RealSubject(); // 延迟初始化}realSubject.request(); // 转发请求}
}

行为型模式

13. 责任链模式(Chain of Responsibility Pattern)

  • 核心思想:避免请求发送者与接收者耦合,让多个对象都有机会处理请求。
  • 适用场景:请求需要多个对象处理时。
// 处理者抽象类
abstract class Handler {protected Handler successor; // 后继者// 设置后继者public void setSuccessor(Handler successor) {this.successor = successor;}// 处理请求public abstract void handleRequest();
}// 具体处理者1
class ConcreteHandler1 extends Handler {public void handleRequest() {if (successor != null) {successor.handleRequest(); // 转发请求}}
}

14. 命令模式(Command Pattern)

  • 核心思想:将请求封装成对象,从而使你可用不同的请求对客户进行参数化。
  • 适用场景:需要对请求排队、日志、撤销操作时。
// 命令接口
interface Command {void execute();
}// 具体命令
class ConcreteCommand implements Command {private Receiver receiver; // 命令的接收者public ConcreteCommand(Receiver receiver) {this.receiver = receiver;}public void execute() {receiver.action(); // 执行接收者的动作}
}// 接收者
class Receiver {void action() {// 执行动作}
}// 调用者
class Invoker {private Command command;// 设置命令public void setCommand(Command command) {this.command = command;}// 执行命令public void executeCommand() {command.execute();}
}

15. 解释器模式(Interpreter Pattern)

  • 核心思想:为给定的语言定义文法表示,并定义一个解释器来处理这个文法。
  • 适用场景:需要解释一种语言时。
// 表达式接口
interface Expression {int interpret();
}// 数字表达式
class Number implements Expression {private int number;public Number(int number) {this.number = number;}public int interpret() {return number; // 返回数字的值}
}// 加法表达式
class Plus implements Expression {private Expression leftOperand;private Expression rightOperand;public Plus(Expression left, Expression right) {this.leftOperand = left;this.rightOperand = right;}public int interpret() {return leftOperand.interpret() + rightOperand.interpret(); // 返回加法结果}
}

16. 迭代器模式(Iterator Pattern)

  • 核心思想:提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部表示。
  • 适用场景:需要遍历聚合对象时。
// 迭代器接口
interface Iterator {boolean hasNext(); // 是否有下一个元素Object next(); // 获取下一个元素
}// 聚合接口
interface Aggregate {Iterator createIterator(); // 创建迭代器
}// 具体聚合类
class ConcreteAggregate implements Aggregate {private List<Object> items = new ArrayList<>();public Iterator createIterator() {return new ConcreteIterator(this); // 创建具体迭代器}
}// 具体迭代器
class ConcreteIterator implements Iterator {private ConcreteAggregate aggregate;private int index;public ConcreteIterator(ConcreteAggregate aggregate) {this.aggregate = aggregate;}public boolean hasNext() {return index < aggregate.items.size(); // 判断是否有下一个元素}public Object next() {return aggregate.items.get(index++); // 返回下一个元素}
}

17. 中介者模式(Mediator Pattern)

  • 核心思想:用一个中介对象来封装一系列对象的交互,使得对象之间不需要显式地相互引用。
  • 适用场景:需要减少对象之间的依赖时。
// 中介者接口
interface Mediator {void notify(Component sender, String event); // 通知方法
}// 具体中介者
class ConcreteMediator implements Mediator {private Component1 component1;private Component2 component2;// 注册组件1public void registerComponent1(Component1 component) {this.component1 = component;}// 注册组件2public void registerComponent2(Component2 component) {this.component2 = component;}public void notify(Component sender, String event) {if (sender == component1 && event.equals("A")) {component2.doSomething(); // 组件1触发事件A,组件2响应} else if (sender == component2 && event.equals("B")) {component1.doSomething(); // 组件2触发事件B,组件1响应}}
}// 组件抽象类
abstract class Component {protected Mediator mediator;public Component(Mediator mediator) {this.mediator = mediator;}
}// 组件1
class Component1 extends Component {public Component1(Mediator mediator) {super(mediator);}public void doSomething() {mediator.notify(this, "A"); // 执行操作并通知中介者}
}// 组件2
class Component2 extends Component {public Component2(Mediator mediator) {super(mediator);}public void doSomething() {mediator.notify(this, "B"); // 执行操作并通知中介者}
}

18. 备忘录模式(Memento Pattern)

  • 核心思想:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
  • 适用场景:需要保存和恢复对象状态时。
// 备忘录类
class Memento {private String state; // 状态public Memento(String state) {this.state = state;}public String getState() {return state; // 获取状态}
}// 原发器类
class Originator {private String state;public void setState(String state) {this.state = state; // 设置状态}public Memento saveStateToMemento() {return new Memento(state); // 保存状态到备忘录}public void getStateFromMemento(Memento memento) {state = memento.getState(); // 从备忘录恢复状态}
}// 管理者类
class Caretaker {private List<Memento> mementoList = new ArrayList<>();public void add(Memento state) {mementoList.add(state); // 添加备忘录}public Memento get(int index) {return mementoList.get(index); // 获取备忘录}
}

19. 观察者模式(Observer Pattern)

  • 核心思想:定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都得到通知并被自动更新。
  • 适用场景:需要观察对象状态变化时。
// 观察者接口
interface Observer {void update(String state); // 更新方法
}// 具体观察者
class ConcreteObserver implements Observer {public void update(String state) {// 处理更新}
}// 主题类
class Subject {private List<Observer> observers = new ArrayList<>(); // 观察者列表private String state;public void attach(Observer observer) {observers.add(observer); // 添加观察者}public void setState(String state) {this.state = state;notifyAllObservers(); // 通知所有观察者}private void notifyAllObservers() {for (Observer observer : observers) {observer.update(state); // 更新观察者}}
}

20. 状态模式(State Pattern)

  • 核心思想:允许对象在内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
  • 适用场景:对象状态改变时行为也改变时。
// 状态接口
interface State {void handle(Context context); // 处理方法
}// 具体状态A
class ConcreteStateA implements State {public void handle(Context context) {context.setState(new ConcreteStateB()); // 转换到状态B}
}// 具体状态B
class ConcreteStateB implements State {public void handle(Context context) {context.setState(new ConcreteStateA()); // 转换到状态A}
}// 上下文类
class Context {private State state;public Context(State state) {this.state = state; // 设置初始状态}public void setState(State state) {this.state = state; // 设置状态}public void request() {state.handle(this); // 请求处理}
}

21. 策略模式(Strategy Pattern)

  • 核心思想:定义一系列算法,把它们一个个封装起来,并且使它们可互相替换。
  • 适用场景:需要动态选择算法时。
// 策略接口
interface Strategy {void execute(); // 执行方法
}// 具体策略A
class ConcreteStrategyA implements Strategy {public void execute() {// 策略A的实现}
}// 具体策略B
class ConcreteStrategyB implements Strategy {public void execute() {// 策略B的实现}
}// 上下文类
class Context {private Strategy strategy;public Context(Strategy strategy) {this.strategy = strategy; // 设置初始策略}public void setStrategy(Strategy strategy) {this.strategy = strategy; // 设置策略}public void executeStrategy() {strategy.execute(); // 执行策略}
}

22. 模板方法模式(Template Method Pattern)

  • 核心思想:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
  • 适用场景:多个类有相似算法时。
// 抽象类
abstract class AbstractClass {// 模板方法public final void templateMethod() {primitiveOperation1();primitiveOperation2();}// 基本操作1protected abstract void primitiveOperation1();// 基本操作2protected abstract void primitiveOperation2();
}// 具体类
class ConcreteClass extends AbstractClass {protected void primitiveOperation1() {// 实现基本操作1}protected void primitiveOperation2() {// 实现基本操作2}
}

23. 访问者模式(Visitor Pattern)

  • 核心思想:将数据结构和作用于结构上的操作解耦,使得操作集合可独立变化。
  • 适用场景:需要对对象结构中的对象实施多种操作时。
// 访问者接口
interface Visitor {void visit(ElementA element);void visit(ElementB element);
}// 元素接口
interface Element {void accept(Visitor visitor); // 接受访问者
}// 具体元素A
class ElementA implements Element {public void accept(Visitor visitor) {visitor.visit(this); // 接受访问者}
}// 具体元素B
class ElementB implements Element {public void accept(Visitor visitor) {visitor.visit(this); // 接受访问者}
}// 具体访问者
class ConcreteVisitor implements Visitor {public void visit(ElementA element) {// 访问元素A的操作}public void visit(ElementB element) {// 访问元素B的操作}
}

总结

设计模式为我们提供了一种标准化的解决方案,可以应对软件开发中常见的问题。通过理解和应用这些模式,我们可以编写出更具可维护性、可扩展性和可重用性的代码。希望这篇博客能帮助你更好地理解和使用设计模式。每种模式都有其独特的应用场景,选择合适的模式可以显著提高代码质量和开发效率。

相关文章:

设计模式全解析:23种经典设计模式及其应用

创建型模式 1. 单例模式&#xff08;Singleton Pattern&#xff09; 核心思想&#xff1a;确保一个类只有一个实例&#xff0c;并提供一个全局访问点。适用场景&#xff1a;需要共享资源的场景&#xff0c;如配置管理、日志记录等。 public class Singleton {// 静态变量保存…...

Web开发-JavaEE应用依赖项Log4j日志Shiro验证FastJson数据XStream格式

知识点&#xff1a; 1、安全开发-JavaEE-第三方依赖开发安全 2、安全开发-JavaEE-数据转换&FastJson&XStream 3、安全开发-JavaEE-Shiro身份验证&Log4j日志处理 一、演示案例-WEB开发-JavaEE-第三方依赖&FastJson&XStream FastJson 一个阿里巴巴开发的J…...

小集合 VS 大集合:MySQL 去重计数性能优化

小集合 VS 大集合&#xff1a;MySQL 去重计数性能优化 前言一、场景与问题 &#x1f50e;二、通俗执行流程对比三、MySQL 执行计划解析 &#x1f4ca;四、性能瓶颈深度剖析 &#x1f50d;五、终极优化方案 &#x1f3c6;六、总结 前言 &#x1f4c8; 测试结果&#xff1a; 在…...

什么是模块化区块链?Polkadot 架构解析

原文&#xff1a;https://polkadot.com/blog/understanding-modular-blockchains/ 作者&#xff1a;Joey Prebys 编译&#xff1a;OneBlock 区块链的构建方式有很多种&#xff0c;而不同的架构选择会直接影响性能、可扩展性和开发者体验。随着行业的发展&#xff0c;单体区块…...

C++翻转数相乘 2024年信息素养大赛复赛 C++小学/初中组 算法创意实践挑战赛 真题详细解析

目录 C++翻转数相乘 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 六、 推荐资料 1、C++资料 2、Scratch资料 3、Python资料 C++翻转数相乘 2024年信息素养大赛 C++复赛真题 一、题目要求 1、编程实现 假设一个…...

Go 语言中的 `select` 语句详解

select 是 Go 语言中处理通道(Channel)操作的一个强大控制结构&#xff0c;它允许 goroutine 同时等待多个通道操作。下面我将全面详细地解释 select 语句的各个方面。 基本语法 select 语句的基本语法如下&#xff1a; select { case <-ch1:// 如果从 ch1 成功接收数据&…...

Nacos简介—4.Nacos架构和原理二

大纲 1.Nacos的定位和优势 2.Nacos的整体架构 3.Nacos的配置模型 4.Nacos内核设计之一致性协议 5.Nacos内核设计之自研Distro协议 6.Nacos内核设计之通信通道 7.Nacos内核设计之寻址机制 8.服务注册发现模块的注册中心的设计原理 9.服务注册发现模块的注册中心的服务数…...

Web服务器技术选型指南:主流方案、核心对比与策略选择

Web服务器技术选型指南&#xff1a;主流方案、核心对比与策略选择 一、主流Web服务器概览 在当今互联网架构中&#xff0c;Web服务器承担着处理HTTP请求、管理资源分配和保障服务稳定性的核心职责。根据应用场景和技术特性的不同&#xff0c;主流的Web服务器可分为以下五类&a…...

Git和Gitlab的部署和操作

一。GIT的基本操作 1.GIT的操作和查看内容 [rootmaster ~]# yum install git -y [rootmaster ~]# git config --list&#xff1a;查看所有配置 2.GIT仓库初始化 [rootmaster ~]# mkdir /gittest&#xff1a;创建目录 [rootmaster ~]# cd /gittest/&#xff1a;进入目录 [rootm…...

【Git】初始Git及入门命令行

目录 为什么学习 Git 这么重要&#xff1f; 1. 安装 Git 2. 配置 Git 3. 创建本地 Git 仓库 1. git初始化远程仓库&#xff1a; git init 2. 就是要新增两个必须要配置的选项&#xff1a; name 和 email 3. 查看当前本地仓库的配置情况&#xff1a; git config -l 4. 删…...

自然语言to SQL的评估

一、怎么进行一个自然语言to SQL评估&#xff1f; 1.DB——准备可用的数据表 2.准备问题集&#xff0c;自然语言|正确的预期SQL 3.大模型执行完成的SQL 4.Table.json——一个存储表格数据或者数据库表结构信息的 JSON 文件。当前是存储的表结构信息的&#xff0c;存储数据库…...

详解React Fiber架构中,reconcile阶段的具体工作流程

在 React Fiber 架构里&#xff0c;协调&#xff08;Reconcile&#xff09;阶段处于虚拟 DOM&#xff08;VDOM&#xff09;与实际 DOM 渲染之间&#xff0c;主要承担着把 VDOM 转化为 Fiber 节点树、开展 Diff 比较并标记节点变化的任务。下面详细阐述协调阶段的具体工作流程&a…...

迅雷精简绿色融合版【高速下载版】12.1.9.2870【11.2.2.1716】【20250426】

迅雷Thunder 11官方版会提示敏感需升级不能使用&#xff0c;本人制作的迅雷 12.1.9.2870【11.2.2.1716】精简绿色融合版是在11.2.2.1716版本的基础上制作的&#xff0c;实际版本号显示为12.1.9.2870&#xff0c;不是真正意义的迅雷12.1.9.2870精简绿色版&#xff0c;本实质上还…...

决策树相关案例

全流程 以下是一个更复杂、全流程的决策树和随机森林示例&#xff0c;不仅包括模型训练和预测&#xff0c;还涵盖了数据预处理、超参数调优以及模型评估的可视化。我们依旧使用鸢尾花数据集&#xff0c;并额外引入 GridSearchCV 进行超参数调优&#xff0c;使用 matplotlib 进…...

AI音频核爆!Kimi开源“六边形战士”Kimi-Audio,ChatGPT语音版?

音频处理领域的天花板被撕开了。 刚刚&#xff0c;kimi 发布全新通用音频基础模型 Kimi-Audio&#xff0c;这款由月之暗面&#xff08;Moonshot AI&#xff09;推出的开源模型&#xff0c;在 24 小时内收获 3.2 万星标&#xff0c;不仅以 1.28% 词错率刷新语音识别纪录&#xf…...

vscode vue 的插件点击组件不能跳转到文件问题解决

ctrl shift p 打开命令行&#xff0c;搜索 更改语言模式 选择第二项 选择 vue 现在可以了...

二叉树的前序、中序和后序遍历:详解与实现

1. 前序遍历&#xff08;Pre-order Traversal&#xff09; 1.1 定义 前序遍历的顺序是&#xff1a;先访问根节点&#xff0c;然后递归地遍历左子树&#xff0c;最后递归地遍历右子树。 1.2 访问顺序 对于任意节点&#xff1a; 访问根节点。 递归遍历左子树。 递归遍历右子…...

5、Rag基础:RAG 专题

RAG 简介 什么是检索增强生成? 检索增强生成(RAG)是指对大型语言模型输出进行优化,使其能够在生成响应之前引用训练数据来源之外的权威知识库。大型语言模型(LLM)用海量数据进行训练,使用数十亿个参数为回答问题、翻译语言和完成句子等任务生成原始输出。在 LLM 本就强…...

FISCO BCOS 智能合约开发详解

一、FISCO BCOS 智能合约开发概览 FISCO BCOS 是一个国产开源联盟链平台&#xff0c;支持两种类型的智能合约&#xff1a;​FISCO BCOS Documentation Solidity 合约&#xff1a;​与以太坊兼容&#xff0c;使用 Solidity 语言编写&#xff0c;适用于灵活的业务逻辑开发。 预…...

Linux操作系统从入门到实战(四)Linux基础指令(下)

Linux操作系统从入门到实战&#xff08;四&#xff09;Linux基础指令&#xff08;下&#xff09; 前言一、date 指令二、cal 指令三、find 指令四、which 指令五、whereis 指令六、alias 指令七、grep 指令八、zip/unzip 指令九、tar 指令&#xff08;重要&#xff09;十、bc 指…...

使用 LLM助手进行 Python 数据可视化

在数据科学中&#xff0c;数据可视化是一项至关重要的任务&#xff0c;旨在揭示数据背后的模式和洞察&#xff0c;并向观众传达这些信息。然而&#xff0c;在编程语言&#xff08;如 Python&#xff09;中创建有洞察力的图表有时可能会耗时且复杂。本文介绍了一种借助 AI 助手&…...

docker安装jenkins自动化测试

#搭建gitlab docker pull gitlab/gitlab-ce docker run -d\--hostname localhost \-p 443:443 -p 80:80 -p 2222:22 \--name gitlab \-v /myproject/gitlab/config:/etc/gitlab \-v /myproject/gitlab/logs:/var/log/gitlab \-v /myproject/gitlab/data:/var/opt/gitlab \gitla…...

Python3:面向对象编程

这里写目录标题 &#x1f9e9; 面向对象编程&#xff1a;让代码化身为积木世界一、核心概念&#xff1a;类与对象二、四大基石&#xff1a;面向对象的核心特性1️⃣ 封装(Encapsulation)&#xff1a;包装复杂性&#xff0c;提供简单接口2️⃣ 继承(Inheritance)&#xff1a;站在…...

数据可视化 —— 饼图

一、饼图的所有常用使用场景 饼图是一种直观展示数据占比关系的图表&#xff0c;适用于以下常见场景&#xff1a; 1. 市场与商业分析 市场份额&#xff1a;展示不同品牌/产品在市场中的占有率。 收入构成&#xff1a;分析公司各业务线或产品的收入占比。 客户分布&#xff1…...

OpenLayers WebGL与3D渲染 (进阶一)

1. WebGL概述 WebGL是一种JavaScript API&#xff0c;它基于OpenGL ES 2.0/3.0标准&#xff0c;允许在不使用插件的情况下在兼容的Web浏览器中呈现高性能的交互式3D和2D图形。在地理信息系统(GIS)领域&#xff0c;WebGL为地图渲染和空间数据可视化提供了强大的性能支持。 1.1…...

ARP协议(地址解析协议)

ARP协议是用来把IP地址转换成MAC地址的。 因为在局域网里&#xff0c;真正通信靠的是MAC地址&#xff0c;但我们平时只知道目标的IP地址&#xff0c;所以需要一个办法把IP地址变成MAC地址 —— 这个过程就是靠ARP完成的。 举个超简单的例子&#xff1a; 你电脑要发数据给192.1…...

深度学习常见框架:TensorFlow 与 PyTorch 简介与对比

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、为什么需要深度学习框架&#xff1f; 2、框架的发展背…...

iOS 类与对象底层原理

iOS 类与对象底层原理 文章目录 iOS 类与对象底层原理探索对象本质objc_setProperty 源码cls与类的关联原理联合体isa的类型isa_t 原理探索initIsa方法通过setClass方法中的shiftcls来验证绑定的一个流程通过 isa & ISA_MSAK通过object_getClass通过位运算 类&类的结构…...

Babel、core-js、Loader之间的关系和作用全解析

在现代前端开发中&#xff0c;Babel、polyfill&#xff08;如 core-js&#xff09;和 Loader 是非常常见又容易混淆的几个概念。为了彻底搞明白它们的作用、关系和使用方法&#xff0c;下面一篇文章详细梳理。 一、Babel的作用 Babel 是一个 JavaScript 的编译器&#xff0c;主…...

总线位宽不变,有效数据位宽变化的缓存方案

总线位宽不变&#xff0c;有效数据位宽变化的缓存方案 譬如总线位宽为64bit&#xff0c;但是有时候只有高32bit有效&#xff0c;有时只有低32bit有效&#xff0c;有时64bit都有效。总线上收到的数据要先缓存到FIFO中&#xff0c;那么这个FIFO的宽度和深度如何设置呢&#xff1…...

若依脱敏功能升级:接口返回想脱就脱,想不脱就不脱(实现灵活可控制的数据脱敏)

若依原生框架中的脱敏功能不够灵活&#xff08;默认超级管理员不脱敏&#xff0c;其他则脱敏&#xff09;。 有时候&#xff0c;我们有些接口想要脱敏&#xff0c;但是有些接口又不想脱敏。&#xff08;例如列表查询的时候脱敏。修改的时候&#xff0c;不想数据脱敏&#xff0…...

【Azure Redis 缓存】在Azure Redis中,如何限制只允许Azure App Service访问?

问题描述 在Azure Redis服务中&#xff0c;如何实现只允许Azure App Service访问呢&#xff1f; 问题解答 Azure Redis 开启 防火墙的功能&#xff0c;并在防火墙中添加上App Service的出口IP地址即可。两步即可实现此目的&#xff01; 1&#xff09;查询 App Service 的出口IP…...

如何解决无训练数据问题:一种更为智能化的解决方案

手动标注数据真的很费时间,而且买数据集又贵得要命,还不一定能完全符合你的需求。但这里有个令人兴奋的好消息,为啥不用 AI 来解决这个问题呢? 别再依赖传统方法了,你可以用像 LLM(大型语言模型)和图像生成器这样的 AI 工具,为你的特定目标创建合成训练数据。如今有那…...

AI 应用同质化:一场看不见的资源 “吞噬战”

大家好&#xff0c;我是涛涛&#xff0c;今天聊聊令人担心的事情。 一、同质化的“繁荣”背后 当ChatGPT在2022年掀起全球AI热潮时&#xff0c;中国互联网行业迅速进入“All in AI”模式。根据艾瑞咨询数据&#xff0c;2023年国内AI应用市场新增注册企业超2.3万家&#xff0c…...

Java + Spring Boot + MyBatis获取以及持久化sql语句的方法

在Java的Spring Boot项目中结合MyBatis获取实际执行的SQL语句&#xff0c;可以通过以下几种方法实现&#xff1a; 方法一&#xff1a;配置MyBatis日志级别 通过调整日志级别&#xff0c;MyBatis会输出执行的SQL语句及参数&#xff0c;适用于快速调试。 修改application.prope…...

「浏览器即OS」:WebVM技术栈如何用Wasm字节码重构冯·诺依曼体系?

一、冯诺依曼架构的维度坍塌 1. 传统计算模型的能量耗散 浏览器执行效率瓶颈分析&#xff1a; 操作x86指令周期Wasm指令周期能效比提升矩阵乘法3894.2x内存访问1234x系统调用120012100x 二、WebVM的量子纠缠架构 1. 浏览器内核的重构 // 基于WASI的系统调用处理 #[no_mangl…...

Vue3项目目录结构规范建议

以下是一个推荐的 Vue 3 项目目录结构规范&#xff0c;适用于中大型项目并遵循最佳实践&#xff1a; 基础目录结构 bash src/ ├─ assets/ # 静态资源 │ ├─ images/ # 图片文件 │ ├─ fonts/ # 字体文件 │ └─ styles/ …...

【计算机视觉】CV实战项目- Four-Flower:基于TensorFlow的花朵分类实战指南

深度解析Four-Flower&#xff1a;基于TensorFlow的花朵分类实战指南 项目概述与技术背景技术栈组成 完整实战流程环境配置1. 基础环境安装2. 项目环境搭建3. 环境验证 数据准备模型架构解析训练过程优化1. 训练配置2. 关键参数建议3. 训练监控 常见问题与解决方案1. 内存不足错…...

4.27 JavaScript核心语法+事件监听

JavaScript负责网页的行为&#xff08;交互行为&#xff09; JS基本语法&#xff1a; 引用方式 变量&常量&数据类型&#xff1a; alert()标签输出弹出框&#xff0c;如以上代码会输出true。 函数&#xff1a; 自定义对象: 属性方法行为 JS中的全局变量是window。 js…...

于键值(KV)的表

基于键值&#xff08;KV&#xff09;的表 将行编码为键值&#xff08;KVs&#xff09; 索引查询&#xff1a;点查询和范围查询 在关系型数据库中&#xff0c;数据被建模为由行和列组成的二维表。用户通过SQL表达他们的意图&#xff0c;而数据库则神奇地提供结果。不那么神奇的…...

Matlab算例运行

1. 使用终端命令运行算例&#xff1a; 2. 如果点击Run 按钮就是会一直报错&#xff0c;所以直接改成终端运行算例...

package.json script 中的 prepare 脚本的作用是什么

在 package.json 的 scripts 中&#xff0c;prepare 脚本是一个特殊的生命周期脚本&#xff0c;主要作用和执行时机如下&#xff1a; prepare 脚本的作用和执行时机 执行时机&#xff1a; 在执行 npm publish 命令之前运行。在执行不带参数的 npm install 命令时运行&#xff…...

图论---最大流(Dinic)

最大流一定是阻塞流&#xff0c;阻塞流不一定是最大流。 阻塞流---从起点到终点的管道已经阻塞了。 时间复杂度&#xff1a; 一般情况&#xff1a;O(n2m)O(n2m)&#xff08;但实际运行效率较高&#xff0c;尤其在稀疏图上&#xff09;。 使用当前弧优化后&#xff0c;效率接近…...

FastAPI系列06:FastAPI响应(Response)

FastAPI响应&#xff08;Response&#xff09; 1、Response入门2、Response基本操作设置响应体&#xff08;返回数据&#xff09;设置状态码设置响应头设置 Cookies 3、响应模型 response_model4、响应类型 response_classResponse派生类自定义response_class 在“FastAPI系列0…...

双目RealSense系统配置rs_camera.launch----实现D435i自制rosbag数据集到离线场景的slam建图

引言 Intel RealSense系列相机因其出色的深度感知能力和灵活的配置选项&#xff0c;在机器视觉与应用中得到广泛应用。大家在后期的slam学习中&#xff0c;无论是对算法本身的性能要求还是实验的泛化性都有一定的要求&#xff0c;那么公开的数据集如kitti、tum、Eourc不能满足…...

【MCP-2】MCP是什么,利用智普大模型在MaxKB中调用自己开发的MCP服务

在上一篇【MCP-1】MCP是什么&#xff0c;从DEMO入手文章中我们介绍了MCP是什么、他能干啥&#xff0c;以及简单的Demo示例等&#xff0c;这篇文章我们使用MaxKB这个工具&#xff0c;利用智普大模型&#xff0c;看看MCP到底怎么用。 创建SSE协议的MCP服务 在上篇文章中的Demo是…...

Allegro23.1新功能之如何单独关闭铜皮显示效果操作指导

Allegro23.1新功能之如何单独关闭铜皮显示效果操作指导 Allegro升级到了23.1的时候,支持单独关闭铜皮显示 ,如下图 如何仅关闭shape的显示,单独显示线,具体操作如下 点击setup...

《从分遗产说起:JS 原型与继承详解》

“天天开心就好” 先来讲讲概念&#xff1a; 原型&#xff08;Prototype&#xff09; 什么是原型&#xff1f; 原型是 JavaScript 中实现对象间共享属性和方法的机制。每个 JavaScript 对象&#xff08;除了 null&#xff09;都有一个内部链接指向另一个对象&#xff0c;这…...

【Part 2安卓原生360°VR播放器开发实战】第二节|基于等距圆柱投影方式实现全景视频渲染

《VR 360全景视频开发》专栏 将带你深入探索从全景视频制作到Unity眼镜端应用开发的全流程技术。专栏内容涵盖安卓原生VR播放器开发、Unity VR视频渲染与手势交互、360全景视频制作与优化&#xff0c;以及高分辨率视频性能优化等实战技巧。 &#x1f4dd; 希望通过这个专栏&am…...

Android——RecyclerView

RecyclerView的使用 依赖 implementation("androidx.recyclerview:recyclerview:1.4.0")activity_recyclerview.xml <androidx.recyclerview.widget.RecyclerViewandroid:id"id/rv"android:layout_width"match_parent"android:layout_height…...