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

做一个网站需要多少人/seo从入门到精通

做一个网站需要多少人,seo从入门到精通,wordpress迁移后后台页面打不开,互联网推广网站建设这些模式关注对象之间的组合和关联方式,以便形成更大的结构和功能。 适配器模式(Adapter Pattern)桥接模式(Bridge)装饰器模式(Decorator)组合模式(Composite)外观模式&a…

这些模式关注对象之间的组合和关联方式,以便形成更大的结构和功能。

  • 适配器模式(Adapter Pattern)
  • 桥接模式(Bridge)
  • 装饰器模式(Decorator)
  • 组合模式(Composite)
  • 外观模式(Facade)
  • 享元模式(Flyweight)
  • 代理模式(Proxy)

适配器模式(Adapter Pattern)

将一个类的接口转换成客户端所期望的另一个接口。
这种模式通常用于解决两个不兼容接口之间的兼容性问题。(充电线的转接头的功能)

一个生活中的实例是使用适配器模式连接不同类型的电源插头和电源插座。假设你有一个美国制造的电器,它使用美国标准的两脚插头(Type A),而你的墙上只有中国标准的三脚插座(Type I)。为了让电器能够在中国使用,你需要一个适配器来连接两者。
以下是一个简单的代码示例,展示了如何使用适配器模式来连接不同类型的插头和插座:

# 目标接口
class SocketAdapter:def __init__(self, plug):self.plug = plugdef connect(self):pass# 中国标准插座
class ChinaSocket:def connect_china_socket(self):print("连接中国标准插座")# 美国标准插头
class USPlug:def connect_us_plug(self):print("连接美国标准插头")# 适配器类
class ChinaToUSAdapter(SocketAdapter):def connect(self):self.plug.connect_china_socket()# 客户端代码
if __name__ == "__main__":china_socket = ChinaSocket()adapter = ChinaToUSAdapter(china_socket)adapter.connect()

在上述代码中,我们定义了一个目标接口 SocketAdapter,它声明了一个 connect 方法。然后,我们有一个中国标准插座类 ChinaSocket,它具有一个 connect_china_socket 方法,用于连接中国标准插座。

接下来,我们有一个美国标准插头类 USPlug,它具有一个 connect_us_plug 方法,用于连接美国标准插头。

然后,我们创建了一个适配器类 ChinaToUSAdapter,它继承了目标接口 SocketAdapter。适配器类内部持有一个中国标准插座对象 china_socket,并实现了目标接口的 connect 方法,该方法通过适配器调用中国标准插座的连接方法。

最后,我们在客户端代码中创建了中国标准插座对象 china_socket,并将其传递给适配器类的构造函数创建适配器对象 adapter。然后,我们调用适配器对象的 connect 方法,它会通过适配器调用中国标准插座的连接方法。

通过适配器模式,我们可以使用适配器对象连接不同类型的插头和插座,使得它们能够兼容并正常工作。这样,我们就实现了不同类型的插头和插座之间的兼容性。

桥接模式(Bridge)

把抽象化与实现化解耦

# 桥接模式的实现# 实现部分的接口
class DrawingAPI:def draw_circle(self, x, y, radius):pass# 具体实现部分A
class DrawingAPIA(DrawingAPI):def draw_circle(self, x, y, radius):print(f"在坐标({x}, {y})处以半径{radius}绘制圆形(使用实现A)")# 具体实现部分B
class DrawingAPIB(DrawingAPI):def draw_circle(self, x, y, radius):print(f"在坐标({x}, {y})处以半径{radius}绘制圆形(使用实现B)")# 抽象部分
class Shape:def __init__(self, drawing_api):self.drawing_api = drawing_apidef draw(self):pass# 具体抽象部分1
class CircleShape(Shape):def __init__(self, x, y, radius, drawing_api):super().__init__(drawing_api)self.x = xself.y = yself.radius = radiusdef draw(self):self.drawing_api.draw_circle(self.x, self.y, self.radius)# 具体抽象部分2
class SquareShape(Shape):def __init__(self, x, y, side_length, drawing_api):super().__init__(drawing_api)self.x = xself.y = yself.side_length = side_lengthdef draw(self):self.drawing_api.draw_square(self.x, self.y, self.side_length)# 客户端代码
if __name__ == "__main__":circle_a = CircleShape(1, 2, 3, DrawingAPIA())circle_a.draw()circle_b = CircleShape(4, 5, 6, DrawingAPIB())circle_b.draw()

在这个示例中,我们使用了桥接模式来将抽象部分(Shape)和实现部分(DrawingAPI)解耦。抽象部分定义了基本的形状(如圆形和正方形),而实现部分定义了具体的绘制方法。
通过将抽象部分和实现部分组合在一起,我们可以轻松地在运行时选择不同的实现,而无需更改抽象部分的代码。这样可以实现更灵活和可扩展的代码结构。
在上述示例中,我们创建了两个具体的实现部分:DrawingAPIADrawingAPIB,它们分别用于绘制圆形。然后,我们创建了两个具体的抽象部分:CircleShape,分别使用不同的实现部分进行绘制。

如果不使用桥接模式进行解耦,代码可能会变得更加紧密耦合,具体实现部分将直接嵌入到抽象部分中。以下是一个示例,展示了没有使用桥接模式的情况:

# 没有使用桥接模式的紧密耦合示例# 圆形类
class CircleShape:def __init__(self, x, y, radius):self.x = xself.y = yself.radius = radiusdef draw(self):# 在这里直接实现绘制圆形的逻辑print(f"在坐标({self.x}, {self.y})处以半径{self.radius}绘制圆形")# 正方形类
class SquareShape:def __init__(self, x, y, side_length):self.x = xself.y = yself.side_length = side_lengthdef draw(self):# 在这里直接实现绘制正方形的逻辑print(f"在坐标({self.x}, {self.y})处以边长{self.side_length}绘制正方形")# 客户端代码
if __name__ == "__main__":circle = CircleShape(1, 2, 3)circle.draw()square = SquareShape(4, 5, 6)square.draw()

在这个紧密耦合的示例中,绘制逻辑直接嵌入到了具体的抽象部分类中。这导致了以下问题:

  1. 如果需要修改绘制逻辑,例如更改绘制圆形的方式,就需要直接修改 CircleShape 类的代码,而不是通过更改实现部分来实现。
  2. 添加新的形状类,例如三角形,需要在每个具体形状类中重复实现绘制逻辑,造成代码重复。

因此,使用桥接模式可以将抽象部分和实现部分解耦,提高代码的灵活性和可扩展性。它允许我们在运行时选择不同的实现部分,而无需修改抽象部分的代码。

装饰器模式(Decorator)

在不修改原始对象的情况下动态地添加额外的功能。
装饰器模式通过将对象包装在一个具有相同接口的装饰器对象中来实现。

装饰器模式由以下几个关键角色组成:

  1. 抽象组件(Component):定义了被装饰对象和装饰器对象的公共接口。
  2. 具体组件(ConcreteComponent):实现了抽象组件接口,并定义了需要被装饰的对象。
  3. 抽象装饰器(Decorator):继承或实现了抽象组件接口,并持有一个对抽象组件的引用。它的主要目的是为了扩展或修改抽象组件的行为。
  4. 具体装饰器(ConcreteDecorator):实现了抽象装饰器接口,并扩展了抽象组件的行为。具体装饰器可以在调用被装饰对象的方法之前或之后添加额外的逻辑。
# 抽象组件
class Component:def operation(self):pass# 具体组件
class ConcreteComponent(Component):def operation(self):print("执行具体组件操作")# 抽象装饰器
class Decorator(Component):def __init__(self, component):self.component = componentdef operation(self):self.component.operation()# 具体装饰器
class ConcreteDecorator(Decorator):def operation(self):super().operation()self.additional_operation()def additional_operation(self):print("执行额外的操作")# 客户端代码
if __name__ == "__main__":# 创建具体组件component = ConcreteComponent()# 创建具体装饰器,并将具体组件作为参数传递decorator = ConcreteDecorator(component)# 执行操作decorator.operation()

在上述示例中,Component 是抽象组件,ConcreteComponent 是具体组件。Decorator 是抽象装饰器,ConcreteDecorator 是具体装饰器。客户端代码创建了一个具体组件对象,并将其作为参数传递给具体装饰器对象。装饰器对象在调用具体组件对象的方法之前或之后添加了额外的操作。

装饰器模式的优点是可以动态地添加功能,而不需要修改原始对象的代码。它提供了一种灵活的方式来扩展对象的行为,同时遵循开闭原则。然而,装饰器模式可能会导致类的数量增加,并且在多层装饰的情况下可能会变得复杂。因此,在使用时需要权衡利弊,并根据具体需求进行设计和实现。

组合模式(Composite)

将对象组合成树形结构以表示“部分-整体”的层次结构。
组合模式使得用户可以统一对待单个对象和组合对象,从而简化了代码的使用和维护。

组合模式由以下几个关键角色组成:

  1. 组件(Component):定义组合中对象的通用接口,可以是抽象类或接口。该接口声明了操作方法,例如添加、删除、获取子组件等。
  2. 叶子节点(Leaf):表示组合中的叶子对象,它没有子组件。实现组件接口的具体类。
  3. 组合节点(Composite):表示组合中的容器对象,它可以包含子组件。实现组件接口的具体类,并包含一个集合来存储子组件。
  4. 客户端(Client):通过组件接口操作组合对象。
# 组件接口
class Component:def add(self, component):passdef remove(self, component):passdef get_child(self, index):passdef operation(self):pass# 叶子节点
class Leaf(Component):def operation(self):print("执行叶子节点操作")# 组合节点
class Composite(Component):def __init__(self):self.children = []def add(self, component):self.children.append(component)def remove(self, component):self.children.remove(component)def get_child(self, index):return self.children[index]def operation(self):print("执行组合节点操作")for child in self.children:child.operation()# 客户端代码
if __name__ == "__main__":# 创建叶子节点leaf1 = Leaf()leaf2 = Leaf()# 创建组合节点,并添加叶子节点composite1 = Composite()composite1.add(leaf1)composite1.add(leaf2)# 创建叶子节点leaf3 = Leaf()# 创建组合节点,并添加叶子节点和组合节点composite2 = Composite()composite2.add(leaf3)composite2.add(composite1)# 执行操作composite2.operation()

在上述示例中,Component 是组件接口,Leaf 是叶子节点类,Composite 是组合节点类。客户端代码创建了一棵树形结构,包含了叶子节点和组合节点,并通过调用 operation() 方法执行操作。组合节点会递归调用其子组件的操作方法,从而实现整个树形结构的操作。

组合模式的优点是简化了代码的使用和维护,使得客户端可以统一对待单个对象和组合对象。它也提供了灵活性和可扩展性,因为可以轻松地添加新的叶子节点或组合节点。然而,组合模式可能会增加系统的复杂性,并且在某些情况下可能会导致性能问题,因此在使用时需要权衡利弊。

外观模式(Facade)

提供了一个统一的接口,用于访问子系统中的一组接口。
外观模式隐藏了子系统的复杂性,为客户端提供了一个简单的接口来与子系统进行交互。

下面是一个外观模式的示例代码:

# 子系统类A
class SubsystemA:def operation_a(self):print("执行子系统A的操作")# 子系统类B
class SubsystemB:def operation_b(self):print("执行子系统B的操作")# 子系统类C
class SubsystemC:def operation_c(self):print("执行子系统C的操作")# 外观类
class Facade:def __init__(self):self.subsystem_a = SubsystemA()self.subsystem_b = SubsystemB()self.subsystem_c = SubsystemC()def operation(self):self.subsystem_a.operation_a()self.subsystem_b.operation_b()self.subsystem_c.operation_c()# 客户端代码
facade = Facade()
facade.operation()

在上述代码中,有三个子系统类 SubsystemASubsystemBSubsystemC,它们分别提供了各自的操作。外观类 Facade 将这些子系统进行了封装,并提供了一个统一的接口 operation()

在客户端代码中,我们创建了一个外观对象 facade,然后通过调用 facade.operation() 来访问子系统的操作。在内部,外观对象会依次调用子系统类的相应方法,隐藏了子系统的复杂性。

当我们执行 facade.operation() 时,会依次输出:

执行子系统A的操作
执行子系统B的操作
执行子系统C的操作

这样,客户端就可以通过简单的接口来访问子系统的功能,而不需要了解和处理子系统的复杂逻辑。外观模式帮助简化了系统的使用和维护。

享元模式(Flyweight)

通过共享对象来减少内存使用和提高性能。
享元模式适用于存在大量相似对象的场景,通过共享这些对象的内部状态,来减少对象的数量。

下面是一个在模具设计中使用享元模式的示例代码:

# 模具接口
class Mold:def __init__(self, mold_type):self.mold_type = mold_typedef produce(self, product):print(f"生产 {product} 使用 {self.mold_type} 模具")# 享元工厂类
class MoldFactory:def __init__(self):self.molds = {}def get_mold(self, mold_type):if mold_type not in self.molds:self.molds[mold_type] = Mold(mold_type)return self.molds[mold_type]# 客户端代码
mold_factory = MoldFactory()# 第一批产品使用 A 类型模具
mold_a = mold_factory.get_mold("A")
mold_a.produce("产品1")
mold_a.produce("产品2")# 第二批产品使用 B 类型模具
mold_b = mold_factory.get_mold("B")
mold_b.produce("产品3")
mold_b.produce("产品4")# 第三批产品继续使用 A 类型模具
mold_a.produce("产品5")
mold_a.produce("产品6")

在上述代码中,Mold 类表示模具,每个模具有一个类型(mold_type)属性,并且可以生产产品。MoldFactory 类是享元工厂类,用于创建和管理模具对象。

在客户端代码中,我们通过 MoldFactory 获取模具对象。如果请求的模具对象已经存在于享元工厂中,则直接返回该对象;否则,创建一个新的模具对象并添加到享元工厂中。这样,相同类型的模具对象会被共享使用。

在示例中,我们先获取了一个类型为 “A” 的模具对象,并使用它生产了两个产品。然后,我们获取了一个类型为 “B” 的模具对象,并使用它生产了两个产品。最后,我们又使用之前获取的 “A” 类型模具对象生产了两个产品。

运行上述代码,会输出以下结果:

生产 产品1 使用 A 模具
生产 产品2 使用 A 模具
生产 产品3 使用 B 模具
生产 产品4 使用 B 模具
生产 产品5 使用 A 模具
生产 产品6 使用 A 模具

可以看到,尽管我们只创建了两个不同类型的模具对象,但通过共享对象的方式,成功地减少了模具对象的数量。享元模式帮助我们节省了内存开销,并提高了系统的性能。

代理模式(Proxy)

它提供了一个代理对象,控制对另一个对象的访问。
通过使用代理对象,可以在访问对象时添加额外的逻辑,例如权限控制、缓存、延迟加载等。

下面是一个代理模式的示例代码:

# 主题接口
class Subject:def request(self):pass# 真实主题类
class RealSubject(Subject):def request(self):print("处理真实请求")# 代理类
class Proxy(Subject):def __init__(self, real_subject):self.real_subject = real_subjectdef request(self):# 在访问真实主题前添加额外的逻辑self.pre_request()# 调用真实主题的请求方法self.real_subject.request()# 在访问真实主题后添加额外的逻辑self.post_request()def pre_request(self):print("代理对象处理请求前的操作")def post_request(self):print("代理对象处理请求后的操作")# 客户端代码
real_subject = RealSubject()
proxy = Proxy(real_subject)# 通过代理对象访问真实主题
proxy.request()

在上述代码中,有一个主题接口 Subject,其中定义了一个 request() 方法。RealSubject 类是真实主题类,实现了主题接口,并提供了具体的请求处理逻辑。

Proxy 类是代理类,也实现了主题接口,并持有一个真实主题对象。在代理类的 request() 方法中,可以在调用真实主题对象的请求方法前后添加额外的逻辑。在示例中,我们在访问真实主题前后分别输出了一些操作。

在客户端代码中,我们创建了一个真实主题对象 real_subject,然后将其传递给代理对象 proxy 的构造函数。通过代理对象 proxy,我们可以访问真实主题的请求方法。

当执行 proxy.request() 时,会依次输出:

代理对象处理请求前的操作
处理真实请求
代理对象处理请求后的操作

可以看到,代理对象在访问真实主题前后添加了额外的操作。代理模式帮助我们控制对真实主题的访问,并可以在访问前后进行一些附加处理。这样,我们可以在不修改真实主题代码的情况下,对其进行扩展和增强。

相关文章:

设计模式之结构型模式

这些模式关注对象之间的组合和关联方式,以便形成更大的结构和功能。 适配器模式(Adapter Pattern)桥接模式(Bridge)装饰器模式(Decorator)组合模式(Composite)外观模式&a…...

centOs 6.10 编译 qt 5.15.11

安装依赖库 xcb 依赖库 qt xcb 需要的依赖 如何要用 x11, 就要在编译的时候加上 -xcb 选项,就要安装 xcb 相关的库。 到时可以在 config.log 文件查看,缺少哪个库就安装哪个。 下面是我手动安装的库和对应版本: xcb-proto-1.14.tar.gz x…...

Redis对象的数据结构及其原理汇总

本文首发于公众号:Hunter后端 原文链接:Redis对象的数据结构及其底层实现原理汇总 当我们被问到 Redis 中有什么数据结构,或者说数据类型,我们可能会说有字符串、列表、哈希、集合、有序集合。 其实这几种数据类型在 Redis 中都由…...

@RestController 注解网页返回 [] ,出现的bug

RestController 注解网页返回 [] ,出现的bug RestController RequestMapping("emp") public class EmployeeController {Autowiredprivate EmployeeService employeeService;GetMapping("find")public List<Employee> find(){List<Employee> …...

C语言指针详解(1)(能看懂字就能明白系列)文章超长,慢慢品尝

目录 1、内存和地址 2、指针简介 与指针相关的运算符&#xff1a; 取地址操作符&#xff08;&&#xff09; 解引用操作符&#xff08;间接操作符&#xff09;&#xff08;*&#xff09; ​编辑 指针变量的声明 指针变量类型的意义 指针的基本操作 1、指针与整数相加…...

为什么别人年薪30W+?同样为测试人,“我“的测试之路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、软件测试员&am…...

【Unity】XML文件的解析和生成

目录 使用XPath路径语法解析 使用xml语法解析 XML文件的生成 XML文件是一种常用的数据交换格式&#xff0c;它以文本形式存储数据&#xff0c;并使用标签来描述数据。解析和生成XML文件是软件开发中常见的任务。 解析XML文件是指从XML文件中读取数据的过程。在.NET中&#…...

Vue h5页面手指滑动图片

场景&#xff1a; 四张图&#xff0c;要求随着手指滑动而滑动 代码&#xff1a; imgs是父盒子 poster-item是每个图片 .imgs {white-space: nowrap;overflow: hidden;overflow-x: auto;margin-bottom: 17px;.poster-item {display: inline-block;vertical-align: middle;wid…...

Python类属性下划线的意义

在Python中&#xff0c;类属性&#xff08;class attribute&#xff09;前面带有下划线的命名约定有一些特殊的含义&#xff0c;但它并不会影响属性的实际行为。这是一种命名约定&#xff0c;用于指示属性的用途和访问级别。以下是一些常见的下划线命名约定&#xff1a; 1. 单…...

DbUtils概述

概述 JDBC实用工具组件 Commons DbUtils库是一个小的类集&#xff0c;旨在使使用JDBC更容易。JDBC资源清理代码是平凡的&#xff0c;容易出错的工作&#xff0c;所以这些类从代码中抽象出所有的清理任务&#xff0c;留给你真正想用JDBC做的事情&#xff1a;查询和更新数据。 …...

大数据基础设施搭建 - Hadoop

文章目录 一、下载安装包二、上传压缩包三、解压压缩包四、配置环境变量五、测试Hadoop5.1 测试hadoop命令5.2 测试wordcount案例5.2.1 创建wordcount输入文本信息5.2.2 执行程序5.2.3 查看结果 六、分发压缩包到集群中其他机器6.1 分发压缩包6.2 解压压缩包6.3 配置环境变量 七…...

测试开发环境下centos7.9下安装docker的minio

按照以下方法进行 1、安装docker&#xff0c;要是生产等还是要按照docker-ce yum install docker 2、启动docker service docker start 3、 查看docker信息 docker info 4、加到启动里 systemctl enable docker.service 5、开始docker pull minio/minio 但报错&#x…...

Django之模版层

目录 一、常用语法 二、模版语法之变量 三、模板之过滤器(Filters) 【1】default 【2】length 【3】filesizeformat 【4】slice 【5】date 【6】safe 【7】truncatechars 【8】其它过滤器&#xff08;了解&#xff09; 四、模版之标签 【1】for标签 【2】if 标签…...

spark性能调优 | 内存优化

目录 我们先了解一下有哪些内存温馨提示RDD示范(spark版本2.1.1)RDD进行优化Df和Ds进行示范 我们先了解一下有哪些内存 1.storage内存 存储数据&#xff0c;缓存 可预估2.shuffle内存 计算join groupby 不可预估spark1.6之前 静态管理的&#xff0c;spark1.6之…...

【PG】PostgreSQL高可用之自动故障转移-repmgrd

前言 上面的几篇文章介绍了repmgr的部署&#xff0c;手动进行 从节点提升&#xff0c;主从切换&#xff0c;孤立从从节点找到新的主库等操作&#xff0c;但是都是需要通过手动去执行命令。大家都知道&#xff0c;在线上生产环境中数据库每秒钟的不可用都会造成严重的事故&am…...

操作系统OS/存储管理/内存管理/内存管理的主要功能_基本原理_要求

基本概念 内存管理的主要功能/基本原理/要求 **内存管理的主要功能&#xff1a; ** 内存空间的分配与回收。由操作系统完成主存储器空间的分配和管理&#xff0c;使程序员摆脱存储分配的麻烦&#xff0c;提高编程效率。地址转换。在多道程序环境下&#xff0c;程序中的逻辑地…...

【手写数据库toadb】SQL解析器的实现架构,create table/insert 多values语句的解析树生成流程和输出结构分析

SQL解析器架构和实现 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方…...

设计模式-备忘录模式-笔记

动机&#xff08;Motivation&#xff09; 在软件构建过程中&#xff0c;某些对象的状态在转换过程中&#xff0c;可能由于某种需要&#xff0c;要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态&#xff0c;便会暴露对象的细节…...

机器学习—基本术语

目录 1.样本&#xff08;示例&#xff09; 2.属性 3.属性值 4.属性空间 5.样本空间 6.学习&#xff08;训练&#xff09; 7.数据集 8.测试 9.假设 10.学习器 11.标记 12.样例 13.标记空间&#xff08;样例空间&#xff09; 14.分类与回归 15.有监督学习、无监督…...

pytorch单精度、半精度、混合精度、单卡、多卡(DP / DDP)、FSDP、DeepSpeed模型训练

pytorch单精度、半精度、混合精度、单卡、多卡&#xff08;DP / DDP&#xff09;、FSDP、DeepSpeed&#xff08;环境没搞起来&#xff09;模型训练代码&#xff0c;并对比不同方法的训练速度以及GPU内存的使用 代码&#xff1a;pytorch_model_train FairScale&#xff08;你真…...

基于PHP的纺织用品商城系统

有需要请加文章底部Q哦 可远程调试 基于PHP的纺织用品商城系统 一 介绍 此纺织用品商城系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。用户可注册登录&#xff0c;购物下单&#xff0c;评论等。管理员登录后台可对纺织用品&#xff0c;用户&#xf…...

Go使用命令行输出二维码

引言 二维码&#xff08;QR code&#xff09;是一种矩阵条码的标准&#xff0c;广泛应用于商业、移动支付和数据存储等领域。在开发过程中&#xff0c;我们可能需要在命令行中显示二维码&#xff0c;这可以帮助我们快速生成和分享二维码信息。本文将介绍如何使用Go语言生成二维…...

最长连续序列[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个未排序的整数数组nums&#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。请你设计并实现时间复杂度为O(n)的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums […...

设计模式-状态模式-笔记

状态模式State 在组件构建过程中&#xff0c;某些对象的状态经常面临变化&#xff0c;如何对这些变化进行有效的管理&#xff1f;同时又维持高层模块的稳定&#xff1f;“状态变化”模式为这一问题提供了一种解决方案。 经典模式&#xff1a;State、Memento 动机&#xff08…...

Java中for、foreach、stream区别和性能比较

文章目录 性能比较区别使用方式和行为 性能比较 最终总结&#xff1a;如果数据在1万以内的话&#xff0c;for循环效率高于foreach和stream&#xff1b;如果数据量在10万的时候&#xff0c;stream效率最高&#xff0c;其次是foreach,最后是for。另外需要注意的是如果数据达到10…...

[CSS] 文本折行

文本折行一般分为两种情况&#xff1a; CJK&#xff08;Chinese/Japanese/Korean&#xff09; 字符和非 CJK 字符。一般非 CJK 字符折行发生在两个单词的空格中间&#xff0c;见下图&#xff1a; 图中文本 “hello world” 包裹容器的宽度为 2rem&#xff0c;但是 hello 并没有…...

033-从零搭建微服务-日志插件(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;mingyue: &#x1f389; 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…...

短期经济波动:均衡国民收入决定理论(三)

短期经济波动&#xff1a;国民收入决定理论(三) 文章目录 短期经济波动&#xff1a;国民收入决定理论(三)[toc]1 总需求曲线及其变动1.1 总需求曲线含义1.2 总需求曲线推导1.2.1 代数推导1.2.2 几何推导 1.3 AD曲线及其变动1.3.1 扩张性财政政策1.3.2 扩张性货币政策 2 总供给曲…...

电力感知边缘计算网关产品设计方案-网关软件架构

边缘计算网关采用ARM定制硬件平台架构,包含上位机端(内网)和FPGA网关端(外网)两部分,通过芯片间的高速信号总线实现边缘计算网关工业数据采集、数据实时传输、数据存储、网关状态信息收集等功能。 边缘计算网关上位机端(内网)重点完成工业数据采集、业务软件运算、客户…...

最新AI创作系统ChatGPT系统运营源码/支持最新GPT-4-Turbo模型/支持DALL-E3文生图

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...