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

8种结构型设计模式对比

一、适配器模式

简介

适配器模式是一种结构型设计模式,它用于将不兼容的接口转换为可兼容的接口。适配器模式允许两个不兼容的类能够协同工作,通过将一个类的接口转换为另一个类所期望的接口形式。这样就能够在不修改现有代码的情况下,使两个不兼容的类能够相互协作。

使用场景

适配器模式通常在以下场景中使用:

  • 当需要将现有类的接口转换为其他接口时,可以使用适配器模式。
  • 当需要与一个或多个现有类进行适配以实现特定功能时,适配器模式是一个非常有用的工具。

代码案例

// 目标接口
interface Target {void request();
}// 需要适配的类
class Adaptee {void specificRequest() {System.out.println("Adaptee's specific request");}
}// 适配器类
class Adapter implements Target {private Adaptee adaptee;Adapter(Adaptee adaptee) {this.adaptee = adaptee;}@Overridepublic void request() {adaptee.specificRequest();}
}// 使用适配器
public class Main {public static void main(String[] args) {Adaptee adaptee = new Adaptee();Target target = new Adapter(adaptee);target.request();}
}

优点

  • 适配器模式能够让两个不兼容的接口能够协同工作,提高代码的复用性和灵活性。
  • 适配器模式能够让客户端代码与具体类解耦,减少了客户端代码对具体类的依赖。

缺点

  • 适配器模式可能需要创建更多的类来实现适配器和被适配者之间的关系,增加了代码的复杂性。
  • 适配器模式可能会引入一定的性能损失,因为需要通过适配器来实现接口转换。

对比其他模式

  • 适配器模式和桥接模式类似,但是适配器模式用于处理接口转换,而桥接模式用于处理抽象和实现的分离。
  • 适配器模式和装饰器模式类似,但是适配器模式用于接口转换,而装饰器模式用于动态地给对象添加额外的功能。

二、桥接模式

简介

桥接模式是一种结构型设计模式,它将抽象部分和实现部分分离,使它们可以独立地变化。通过将抽象和实现分离,桥接模式可以使两者能够独立地进行扩展。这种模式的核心目标是通过解耦抽象和实现,来使它们能够相互独立地变化。

使用场景

桥接模式通常在以下场景中使用:

  • 当需要抽象和实现能够独立地变化时,可以使用桥接模式。
  • 当需要避免多重继承的情况下,可以使用桥接模式。
  • 当需要改变一个类的实现时,不影响其他使用该类的类时,可以使用桥接模式。

代码案例

// 实现部分接口
interface Implementor {void operationImp();
}// 具体实现部分A
class ConcreteImplementorA implements Implementor {@Overridepublic void operationImp() {System.out.println("ConcreteImplementorA operationImp");}
}// 具体实现部分B
class ConcreteImplementorB implements Implementor {@Overridepublic void operationImp() {System.out.println("ConcreteImplementorB operationImp");}
}// 抽象部分接口
abstract class Abstraction {protected Implementor implementor;Abstraction(Implementor implementor) {this.implementor = implementor;}abstract void operation();
}// 具体抽象部分
class ConcreteAbstraction extends Abstraction {ConcreteAbstraction(Implementor implementor) {super(implementor);}@Overridevoid operation() {implementor.operationImp();}
}// 使用桥接模式
public class Main {public static void main(String[] args) {Implementor implementorA = new ConcreteImplementorA();Implementor implementorB = new ConcreteImplementorB();Abstraction abstractionA = new ConcreteAbstraction(implementorA);abstractionA.operation();Abstraction abstractionB = new ConcreteAbstraction(implementorB);abstractionB.operation();}
}

优点

  • 桥接模式使抽象部分和实现部分能够独立地变化,解耦了抽象和实现,提高了代码的灵活性和可扩展性。
  • 桥接模式可以在运行时动态地切换实现,不需要修改客户端代码。

缺点

  • 桥接模式可能会增加系统的复杂性,因为需要创建额外的抽象和实现类来进行桥接。
  • 桥接模式可能会增加系统的开销,因为需要通过桥接来实现抽象和实现的分离。

对比其他模式

  • 桥接模式和适配器模式类似,但是桥接模式用于处理抽象和实现的分离,而适配器模式用于处理接口转换。
  • 桥接模式和装饰器模式类似,但是桥接模式用于抽象和实现的分离,而装饰器模式用于动态地给对象添加额外的功能。

三、组合模式

简介

组合模式是一种结构型设计模式,它允许将对象组合成树形结构,以表示整体-部分的层次结构。通过使用组合模式,可以以统一的方式处理对象组合和单个对象。

使用场景

  • 当希望将对象以树形结构组织起来的时候,可以使用组合模式。例如,文件系统中的文件和目录可以使用组合模式来表示,每个目录都可以包含子目录和文件。
  • 当需要对整个对象集合或其中一部分进行处理时,可以使用组合模式。例如,统计一个部门的所有员工的工资总和,可以通过遍历部门的树形结构来计算。

代码案例

// 抽象组件
interface Component {void operation();
}// 叶子组件
class Leaf implements Component {public void operation() {System.out.println("Leaf operation");}
}// 复合组件
class Composite implements Component {private List<Component> components = new ArrayList<>();public void add(Component component) {components.add(component);}public void remove(Component component) {components.remove(component);}public void operation() {System.out.println("Composite operation");for (Component component : components) {component.operation();}}
}// 使用示例
public class Main {public static void main(String[] args) {Component leaf1 = new Leaf();Component leaf2 = new Leaf();Component composite1 = new Composite();Component composite2 = new Composite();composite1.add(leaf1);composite1.add(leaf2);composite2.add(composite1);composite2.operation();}
}

优缺点

优点:

  • 可以简化客户端代码,客户端可以统一处理复合对象和叶子对象。
  • 新增或移除组件比较容易,客户端无需关心具体组件的类型。

缺点:

  • 增加了系统的复杂性,部分情况下可能会加重代码的维护负担。
  • 使用组合模式时,需要权衡透明性和安全性,可能会导致设计模糊。

与其他模式对比

  • 组合模式和装饰器模式:两者都涉及对象组合,但装饰器模式注重给对象动态添加功能,而组合模式注重树形结构。
  • 组合模式和桥接模式:两者都涉及对象组合,但桥接模式注重将抽象和实现解耦,而组合模式注重树形结构。
  • 组合模式和享元模式:两者都涉及对象共享,但组合模式注重树形结构,共享的是整体,而享元模式注重细粒度对象的共享。

四、装饰器模式

简介

装饰器模式是一种结构型设计模式,它允许动态地给对象添加额外的功能。装饰器模式通过使用额外的对象来包装原始对象,并在调用原始对象的方法前后执行额外的操作。

使用场景

  • 当需要给对象动态地添加额外功能或行为时,可以使用装饰器模式。例如,为了在运行时对数据库查询结果进行缓存,可以使用装饰器模式来包装查询操作。
  • 当希望继承关系具有更大灵活性时,可以使用装饰器模式。装饰器模式允许动态地给对象添加额外功能,避免了静态继承的限制。

代码案例

# 抽象组件
class Component:def operation(self):pass# 具体组件
class ConcreteComponent(Component):def operation(self):print("ConcreteComponent operation")# 装饰器基类
class Decorator(Component):def __init__(self, component):self._component = componentdef operation(self):self._component.operation()# 具体装饰器
class ConcreteDecoratorA(Decorator):def operation(self):super().operation()print("ConcreteDecoratorA operation")class ConcreteDecoratorB(Decorator):def operation(self):print("ConcreteDecoratorB operation")super().operation()# 使用示例
component = ConcreteComponent()
decoratorA = ConcreteDecoratorA(component)
decoratorB = ConcreteDecoratorB(decoratorA)
decoratorB.operation()

优缺点

优点:

  • 可以动态地给对象添加额外的功能,而不需要修改原始对象的代码。
  • 装饰器模式遵循开闭原则,允许在不修改现有代码的情况下,给对象添加新的功能。

缺点:

  • 增加了系统的复杂性,需要尽量避免过多的装饰器嵌套。
  • 需要注意装饰器的顺序,因为装饰器的执行顺序可能会影响最终结果。

与其他模式对比

  • 装饰器模式和代理模式:两者都涉及对象包装,但装饰器模式注重动态添加功能,而代理模式注重控制对象的访问。
  • 装饰器模式和适配器模式:两者都涉及对象的包装,但适配器模式注重将不同接口的对象适配为统一接口,而装饰器模式注重动态添加功能。
  • 装饰器模式和桥接模式:两者都涉及对象的包装,但装饰器模式注重给对象动态添加功能,而桥接模式注重将抽象部分和实现部分解耦。

五、外观模式

简介

外观模式是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统的一组接口。外观模式通过封装一组复杂的子系统接口,简化了客户端与子系统之间的交互。

使用场景

  • 当希望对复杂子系统进行简化并提供统一接口的时候,可以使用外观模式。例如,客户端需要与数据库、缓存、消息队列等多个组件交互时,可以通过外观模式将这些交互封装起来,对外提供统一的接口。
  • 当需要解耦客户端和子系统之间的依赖关系时,可以使用外观模式。

代码案例

# 子系统A
class SubsystemA:def methodA(self):print("SubsystemA methodA")# 子系统B
class SubsystemB:def methodB(self):print("SubsystemB methodB")# 外观类
class Facade:def __init__(self):self._subsystemA = SubsystemA()self._subsystemB = SubsystemB()def operation(self):self._subsystemA.methodA()self._subsystemB.methodB()# 使用示例
facade = Facade()
facade.operation()

优缺点

优点:

  • 简化了客户端与子系统之间的交互,客户端只需要与外观类交互即可,不需要了解子系统的细节。
  • 解耦了客户端和子系统的依赖关系,客户端只需要依赖外观类即可。

缺点:

  • 太多的依赖于外观类可能会导致系统可维护性下降,不利于系统的扩展。

与其他模式对比

  • 外观模式和适配器模式:两者都涉及封装,但外观模式注重对一组接口的统一封装,而适配器模式注重对不同接口的适配。
  • 外观模式和中介者模式:两者都涉及解耦客户端和子系统的依赖关系,但中介者模式注重通过中介对象进行交互,而外观模式注重提供统一的接口。
  • 外观模式和代理模式:两者都涉及封装,但代理模式注重控制对象的访问,而外观模式注重对一组接口的统一封装。

六、享元模式

简介

享元模式是一种结构型设计模式,它通过共享对象来减少内存使用,以支持大量细粒度的对象。享元模式将对象的状态分为内部状态和外部状态,内部状态可以共享,外部状态可以由客户端传入。

使用场景

  • 当需要创建大量细粒度对象,并且内部状态可以共享时,可以使用享元模式。例如,网页编辑器中的字母对象,可以通过享元模式来实现共享。
  • 当对象的大部分状态可以从外部传入,并且不依赖于具体对象的时候,可以使用享元模式。

代码案例

import java.util.HashMap;
import java.util.Map;// 具体享元类
class ConcreteFlyweight implements Flyweight {private String intrinsicState;public ConcreteFlyweight(String intrinsicState) {this.intrinsicState = intrinsicState;}public void operation(String extrinsicState) {System.out.println("Intrinsic state: " + intrinsicState);System.out.println("Extrinsic state: " + extrinsicState);}
}// 享元工厂
class FlyweightFactory {private Map<String, Flyweight> flyweights = new HashMap<>();public Flyweight getFlyweight(String key) {if (!flyweights.containsKey(key)) {flyweights.put(key, new ConcreteFlyweight(key));}return flyweights.get(key);}
}// 使用示例
public class Main {public static void main(String[] args) {FlyweightFactory factory = new FlyweightFactory();Flyweight flyweight1 = factory.getFlyweight("key1");flyweight1.operation("state1");Flyweight flyweight2 = factory.getFlyweight("key2");flyweight2.operation("state2");}
}

优缺点

优点:

  • 可以减少内存使用,提高系统的性能。
  • 在大规模细粒度对象的场景下,可以节省大量内存空间。

缺点:

  • 增加了系统的复杂性,需要对外部状态进行管理,可能会引入线程安全问题。
  • 需要权衡在内部状态和外部状态之间的共享程度。

与其他模式对比

  • 享元模式和单例模式:两者都涉及共享对象,但单例模式注重单一实例,而享元模式注重共享细粒度对象。
  • 享元模式和原型模式:两者都涉及创建对象,但原型模式注重克隆对象,而享元模式注重共享对象。
  • 享元模式和代理模式:两者都涉及对象的封装,但代理模式注重控制对象的访问,而享元模式注重共享对象的内部状态。

七、代理模式

简介

代理模式是一种结构型设计模式,用于控制对象的访问,并在访问对象时添加额外的处理。代理模式通过创建一个代理对象来代替原始对象,客户端使用代理对象进行操作,代理对象在执行操作前后可以添加一些额外的逻辑。

使用场景

  • 当需要对对象的访问进行控制时,可以使用代理模式。例如,限制对敏感数据的访问,可以创建一个代理对象,在访问敏感数据前进行身份验证。
  • 当需要在访问对象时添加额外的处理逻辑时,可以使用代理模式。例如,记录日志、缓存结果等操作,都可以在代理对象中完成。

代码案例

// 抽象主题
interface Subject {void operation();
}// 具体主题
class RealSubject implements Subject {public void operation() {System.out.println("RealSubject operation");}
}// 代理类
class Proxy implements Subject {private RealSubject realSubject;public void operation() {beforeOperation();if (realSubject == null) {realSubject = new RealSubject();}realSubject.operation();afterOperation();}private void beforeOperation() {System.out.println("Proxy before operation");}private void afterOperation() {System.out.println("Proxy after operation");}
}// 使用示例
public class Main {public static void main(String[] args) {Proxy proxy = new Proxy();proxy.operation();}
}

优缺点

优点:

  • 可以控制对对象的访问,并在访问对象时添加额外的处理。
  • 代理模式遵循开闭原则,客户端不需要修改原始对象的代码,只需要使用代理对象即可。

缺点:

  • 代理模式增加了系统的复杂性,因为引入了新的对象。
  • 可能会降低系统的性能,因为代理对象需要额外的处理逻辑。

与其他模式对比

  • 代理模式与装饰器模式:两者都涉及对象的封装,但装饰器模式注重给对象动态添加功能,而代理模式注重控制对象的访问。
  • 代理模式与适配器模式:两者都涉及对象的转换,但适配器模式注重将不同接口的对象适配为统一接口,而代理模式注重控制对象的访问。
  • 代理模式与外观模式:两者都涉及封装,但外观模式注重提供统一接口,而代理模式注重控制对象的访问。

八、装饰器模式

简介

装饰器模式是一种结构型设计模式,允许动态地给对象添加额外的功能。装饰器模式通过使用额外的对象来包装原始对象,并在调用原始对象的方法前后执行额外的操作。

使用场景

  • 当需要给对象动态地添加额外的功能或行为时,可以使用装饰器模式。例如,在不修改原有类的情况下,为对象添加日志记录、性能统计、缓存等功能。
  • 当希望继承关系具有更大灵活性时,可以使用装饰器模式。装饰器模式允许动态地给对象添加额外的功能,避免了静态继承带来的类爆炸问题。

代码案例

# 抽象组件
class Component:def operation(self):pass# 具体组件
class ConcreteComponent(Component):def operation(self):print("ConcreteComponent operation")# 装饰器基类
class Decorator(Component):def __init__(self, component):self._component = componentdef operation(self):self._component.operation()# 具体装饰器
class ConcreteDecoratorA(Decorator):def operation(self):print("ConcreteDecoratorA operation")super().operation()class ConcreteDecoratorB(Decorator):def operation(self):super().operation()print("ConcreteDecoratorB operation")# 使用示例
component = ConcreteComponent()
decoratorA = ConcreteDecoratorA(component)
decoratorB = ConcreteDecoratorB(decoratorA)
decoratorB.operation()

优缺点

优点:

  • 可以动态地给对象添加额外的功能,而不需要修改原始对象的代码。
  • 装饰器模式遵循开闭原则,允许在不修改现有代码的情况下,给对象添加新的功能。

缺点:

  • 增加了系统的复杂性,需要尽量避免过多的装饰器嵌套。
  • 需要注意装饰器的顺序,因为装饰器的执行顺序可能会影响最终结果。

与其他模式对比

  • 装饰器模式和代理模式:两者都涉及对象包装,但装饰器模式注重动态添加功能,而代理模式注重控制对象的访问。
  • 装饰器模式和适配器模式:两者都涉及对象的包装,但适配器模式注重将不同接口的对象适配为统一接口,而装饰器模式注重动态添加功能。
  • 装饰器模式和桥接模式:两者都涉及对象的包装,但装饰器模式注重给对象动态添加功能,而桥接模式注重将抽象部分和实现部分解耦。

相关文章:

8种结构型设计模式对比

一、适配器模式 简介 适配器模式是一种结构型设计模式&#xff0c;它用于将不兼容的接口转换为可兼容的接口。适配器模式允许两个不兼容的类能够协同工作&#xff0c;通过将一个类的接口转换为另一个类所期望的接口形式。这样就能够在不修改现有代码的情况下&#xff0c;使两…...

【PX4】Ubuntu20.04+ROS Noetic 配置PX4-v1.12.2和Gazebo11联合仿真环境【教程】

【PX4】Ubuntu20.04ROS Noetic 配置PX4-v-v1.12.2和Gazebo11联合仿真环境【教程】 文章目录 【PX4】Ubuntu20.04ROS Noetic 配置PX4-v-v1.12.2和Gazebo11联合仿真环境【教程】0. 安装UbuntuROS1. 安装依赖2. 安装QGC地面站3. 配置PX4-v1.12.23.1 安装PX43.2 测试PX4是否成功安装…...

msvcp120.dll丢失怎么办?(五种方法快速解决)

首先&#xff0c;让我们来了解一下msvcp120.dll这个文件。msvcp120.dll是一个动态链接库文件&#xff0c;它是Microsoft Visual C 2012 Redistributable Package的一部分。这个文件的作用是支持一些应用程序的运行&#xff0c;例如游戏、办公软件等。当我们在使用这些软件时&am…...

eslint写jsx报错

eslint写jsx报错 ChatGPT提示 在写JSX时&#xff0c;ESLint可能会报出一些语法错误&#xff0c;这些错误通常是由于ESLint默认配置中不支持JSX语法导致的。为了解决这些错误&#xff0c;我们需要在ESLint配置文件中启用对JSX语法的支持。 首先&#xff0c;需要安装eslint-pl…...

最新适合小白前端 Javascript 高级常见知识点详细教程(每周更新中)

1. window.onload 窗口或者页面的加载事件&#xff0c;当文档内容完全加载完成会触发的事件&#xff08;包括图形&#xff0c;JS脚本&#xff0c;CSS文件&#xff09;&#xff0c;就会调用处理的函数。 <button>点击</button> <script> btn document.q…...

积分值和面积、对称性

积分的基本含义要从积分符号说起&#xff0c;积分号含有加号的意思&#xff0c; ∫ a b f ( x ) d x \int ^b_af(x)dx ∫ab​f(x)dx可以理解为&#xff1a;区间[a,b]无限细分为无穷多个dx,无穷多个f(x)乘以dx的累积和。根据上面的描述&#xff0c;面积可以理解为 ∫ a b ∣ f (…...

springboot 整合es

Spring Boot可以轻松地与Elasticsearch进行整合&#xff0c;以实现高效的搜索和分析功能。 以下是如何在Spring Boot应用程序中使用Elasticsearch的步骤&#xff1a; 1.添加依赖项 在pom.xml文件中添加以下依赖项&#xff1a; <dependency><groupId>org.spring…...

MyBatisPlus使用自定义JsonTypeHandler实现自动转化JSON

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…...

LeetCode 2097. 合法重新排列数对【欧拉通路,DFS】2650

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

学习笔记-接口测试(postman、jmeter)

目录 一、什么是接口测试 二、前端和后端 三、get请求和post请求的区别 四、cookie和session 五、接口测试的依据 六、HTTP状态码 七、通用接口用例 八、postman接口测试 九、Jmeter接口测试 一、什么是接口测试 通常做的接口测试指的是系统对外的接口&#xff0c;比…...

如何高效批量查询快递单号,提高工作效率?

在日常生活中&#xff0c;快递单号的查询是一项常规任务。过去&#xff0c;这项任务需要通过人工一个一个地在快递平台上查询&#xff0c;既耗时又费力。然而&#xff0c;随着科技的发展&#xff0c;我们有了更多的工具可以帮助我们高效地完成这项任务。本文将介绍如何使用固乔…...

12万汉语源流词典汉字记性ACCESS\EXCEL数据库

《12万汉语源流词典汉字记性ACCESS数据库》在继承前人经验的基础上&#xff0c;注意吸收今人的研究成果&#xff0c;注重形音义的密切配合&#xff0c;尽可能历史地、正确地反映汉字形音义的发展。在字形方面&#xff0c;简要说明其结构的演变。语义解释遵循古今语义的发展变化…...

深度解剖数据在队列的应用

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大一&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 望小伙伴们点赞&#x1f44d;收藏✨加关注哟&#x1f495;&#x1…...

IMX6ULL移植篇-Linux内核源码目录分析二

一. Linux内核源码目录 本文继续来具体说明 Linux内核源码的一些重要文件含义。 本文续上一篇文章&#xff0c;地址如下&#xff1a; IMX6ULL移植篇-Linux内核源码目录分析一_凌肖战的博客-CSDN博客 二. Linux内核源码目录分析 9. init 目录 此目录存放 Linux 内核启动的…...

汽车行业数据治理方案,助力车企研产供销数据一体化

随着数字技术的不断革新和应用&#xff0c;汽车行业已转向大数据、新技术寻求生产力突破&#xff0c;以电动化、网联化、智能化、共享化为标志的“汽车新四化”&#xff0c;为汽车行业带来了翻天覆地的变化。如何抓住“新四化”的机会&#xff0c;在汽车产业变革中赢得先机&…...

canvas-绘图库fabric.js简介

一般情况下简单的绘制&#xff0c;其实canvas原生方法也可以满足&#xff0c;比如画个线&#xff0c;绘制个圆形、正方形、加个文案。 let canvas document.getElementById(canvas);canvas.width 1200;canvas.height 600;canvas.style.width 1200px;canvas.style.height 6…...

代码审计——任意文件下载详解(二)

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 网站可能提供文件查看或下载的功能&#xff0c;如果对用户查看或下载的文件不做限制&#xff0c;就能够查看或下载任意的文件&…...

19异常的学习笔记

异常 很重要&#xff0c;有利于我们平时处理问题 异常就是代表程序出现了问题 常见的异常比如说 数组越界除法除0 异常的体系是什么 java.lang.Throwable Error Exception RuntimeException 其他异常 Error 代表的是系统级别的错误&#xff0c;也就是一旦系统出现问题&…...

Jenkins学习笔记4

配置构建流程&#xff1a; Jenkins任务创建&#xff1a; 1&#xff09;创建新任务&#xff1a; 把这个Accept first connection改成 No Validation。问题得到解决。 构建触发器这块暂时没有需要配置的。 传输文件到nginx-server这个web服务器中。 将文件上传到/usr/share/n…...

自学 Java 需要具备哪些基本条件或技能?

新手初学者在自己学习Java时&#xff0c;需要注意两个方面&#xff0c;一个是学习方面&#xff0c;一个是知识点方面&#xff01; 学习方面&#xff1a; 1、做学习计划并保持自律 在我们学习Java的过程中&#xff0c;尽量减少干扰&#xff0c;把自己的全部注意力集中在Java上…...

[激光原理与应用-68]:如何消除50Hz工频干扰和差分信号应对工频干扰

目录 一、什么工频干扰 1.1 什么工频干扰 1.2 工频干扰的幅度 1.3 工频干扰如何进入设备 1.4 工频干扰的负面影响 二、如何消除工频干扰 2.1 要消除工频干扰&#xff0c;可以考虑以下方法&#xff1a; 2.2 要具体消除工频干扰&#xff0c;可以采取以下措施 2.3 使用差…...

【力扣-每日一题】LCP 06. 拿硬币

class Solution { public:int minCount(vector<int>& coins) {int res0;for(auto i:coins){resi/2;res(i%2)?1:0;}return res;} };...

【JAVA-Day32】精通Java函数:定义、调用和主函数的完整指南

精通Java函数&#xff1a;定义、调用和主函数的完整指南 精通Java函数&#xff1a;定义、调用和主函数的完整指南摘要引言1. Java函数基础什么是Java函数&#xff1f;函数的定义和命名规则参数和返回值的概念 2. 函数的定义与语法如何声明和定义函数&#xff1f;函数的参数和参…...

springboot相关操作学习汇总

IDEAMAVEN apache maven 3.6.3 的安装及配置IntelliJ IDEA 安装及配置详细教程Maven下载安装及IDEA配置Maven的超详细教程 GIT 版本控制工具 - git的安装与使用gitlab上传新项目全过程 SPRINGBOOT IDEAmavenSpringboot工程创建超详细过程示例SpingBoot&#xff1a;整合Myb…...

如何在微信上制作自己的小程序卖东西

在当今的数字化时代&#xff0c;微信小程序已成为电商行业的重要平台。本文将详细解析电商微信小程序的制作流程&#xff0c;帮助你了解从零到上线的过程。 一、前期准备 1. 确定商城定位和目标群体&#xff1a;在制作电商微信小程序前&#xff0c;你需要明确商城的定位&#x…...

24.Xaml ListView控件-----显示数据

1.运行效果 2.运行源码 a.Xaml源码 <Window x:Class="testView.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mic…...

YoloV5改进实战:使用MPDIoU改进YoloV5

文章目录 摘要论文:揭秘精准高效的MPDIoU损失函数摘要1、简介2、相关工作2.1、目标检测和实例分割2.2. 场景文本识别2.3、边界框回归的损失函数3、点距最小的并集交点4、实验结果4.1、 实验设置4.2、数据集4.3、 评估协议4.4、 目标检测的实验结果4.5、 字符级场景文本识别的实…...

从电大搜题到上海开放大学,广播电视大学引领学习新风尚

近年来&#xff0c;随着信息技术的飞速发展&#xff0c;互联网的普及和应用成为了我们生活中不可或缺的一部分。而在大学学习领域&#xff0c;电大搜题微信公众号应运而生&#xff0c;为广大学子提供了便捷的学习资源和交流平台。在这个信息高速发展的时代&#xff0c;上海开放…...

DC/DC开关电源学习笔记(九)Buck降压拓扑原理

(九)Buck降压拓扑原理 1.概述2. Buck降压原理3. Buck电路的三种工作模式3.1 CCM:3.2 BCM3.3 DCM4. 伏秒法则1.概述 Buck电路属于非隔离的直流变换器,在开关电源中广泛应用,BUCK电路是一种基于电感储能原理的DC-DC变换器,其涉及到物理中的电磁感应和电能转换的基本原理。…...

【浏览器】主流浏览器伪元素一览

不同浏览器对于伪元素的支持程度可能会有所差异。以下是各主流浏览器对一些常见伪元素的支持情况&#xff1a; WebKit&#xff08;Chrome、Safari、新版Edge&#xff09;&#xff1a; ::-webkit-scrollbar&#xff1a;用于自定义滚动条样式的伪元素。::-webkit-outer-spin-butt…...

网站建设维护需要作假吗/中国国际新闻

传送门&#xff08;不用再辛苦百度实验报告啦&#xff0c;一键直达呦&#xff09; oracle实验1 oracle 基本操作 oracle实验2 oracle数据体系结构 oracle实验3 用户、方案的创建与管理 oracle实验4 表的创建与管理 oracle实验5 sql基本查询 oracle实验6 sql高级查询 ora…...

三河做网站/2345网址导航电脑版

1. 基础选择器 Basics 名称 说明 举例 #id 根据元素Id选择 $("divId") 选择ID为divId的元素 element 根据元素的名称选择, $("a") 选择所有<a>元素 .class 根据元素的css类选择 $(".bgRed") 选择所用CSS类为 bgRed的元素 * 选择所有元素 $…...

网站和微信公众号建设/优化设计五年级下册数学答案

数据湖技术圈作者刘凯廷 百草味-信息数据中心负责人 朱齐天 百草味-信息数据中心-数据部负责人1百草味公司及业务简介 百草味是以休闲食品研发、加工、生产、贸易、仓储、物流为主体&#xff0c;集互联网商务经营模式、新零售为一体的全渠道品牌和综合型品牌。百草味以“让…...

雨花区区网站建设公司/沈阳网站seo

摘要: bootstrap栅栏系统css中的col-xs-*、col-sm-*、col-md-* 的意义&#xff1a; .col-xs- 超小屏幕 手机 (<768px) .col-sm- 小屏幕 平板 (≥768px) .col-md- 中等屏幕 桌面显示器 (≥992px) .col-lg- 大屏幕 大桌面显示器 (≥1200px) 首先说明&#xff1a; 1、col…...

桑拿网站只做/高级搜索百度

一般我们下载SCI论文先在kopernio中查找&#xff0c;这个插件确实很方便。万一查找不到的话再去sci-hub上进行下载。 一、Kopernio插件 Kopernio是基于chrome浏览器的一款免费插件&#xff0c;通过人工智能技术使得用户可一键访问其所在机构订购的期刊论文&#xff0c;大大节省…...

网站建设shzanen/广告免费发布信息

​​​​​​​​​​​​​​​​​​​​​摘要&#xff1a;语言模型即根据当前语境的上下文推断当前句子的意思。目录&#xff1a;1. 语言模型定义2. 基于深度学习的解决思路3. 语言模型的问题4. 未来展望一、语言模型定义1. 什么是语言模型&#xff1f;图1如图1所示&#x…...