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

第四篇 行为型设计模式 - 灵活定义对象间交互

第四篇:行为型设计模式 - 灵活定义对象间交互

行为型设计模式关注对象之间的交互和职责分配,旨在定义对象间的高效、灵活的通信机制。以下是十一种常见行为型设计模式的详解及其应用场景。

1. 策略模式详解及其应用场景

详解:
策略模式定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用该算法的客户。

在策略模式中,通常包含以下角色:

  • Strategy(策略)接口:声明所有支持的算法的公共操作。
  • Concrete Strategy(具体策略)类:实现 Strategy 接口,提供具体的算法实现。
  • Context(上下文)类:持有一个 Strategy 对象引用,使用这个策略来执行相关操作。

应用场景:
策略模式适用于以下场景:

  • 当一个系统需要在多种算法中进行选择时,如排序算法、数据加密等。
  • 当如果更换或增加新的算法,不希望修改客户端代码时。

例如,在电商系统中,可以根据不同的促销策略创建多个具体策略类,上下文根据用户选择的策略应用相应的优惠算法。

2. 模板方法模式详解及其应用场景

详解:
模板方法模式在一个抽象类中定义一个操作中的算法骨架,而将一些步骤延迟到子类中实现。它使得子类可以在不改变结构的情况下重写部分算法。

在模板方法模式中,通常包含以下角色:

  • Abstract Class(抽象类):定义了一个或多个操作的固定步骤以及可变步骤的模板方法。
  • Concrete Class(具体类):继承自抽象类,实现父类中定义的抽象方法,完成算法的一部分。

应用场景:
模板方法模式适用于以下场景:

  • 当多个类有相同的算法结构,但各自的具体实现不同时。
  • 当希望为子类提供一个统一的操作框架,且这些操作大部分是固定的,但某些步骤允许子类自定义时。

例如,在咖啡制作过程中,抽象咖啡类定义了煮咖啡的基本流程(加水、加热、冲泡),而美式咖啡类和拿铁咖啡类则分别实现添加咖啡粉和奶泡这两个可变步骤。

3. 观察者模式详解及其应用场景

详解:
观察者模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。

在观察者模式中,通常包含以下角色:

  • Subject(主题/被观察者)接口或抽象类:维护一个观察者列表,并定义添加、删除观察者的方法,以及通知所有观察者的接口。
  • Concrete Subject(具体主题/具体被观察者)类:实现了 Subject,当其状态改变时负责通知所有注册过的观察者。
  • Observer(观察者)接口:定义了当主题状态变化时更新自己的方法。
  • Concrete Observer(具体观察者)类:实现了 Observer 接口,存储对 Concrete Subject 的引用,并在其状态改变时进行响应。

应用场景:
观察者模式适用于以下场景:

  • 当一个对象的改变需要同时改变其他对象,而且不知道具体有多少对象需要被改变时。
  • 当一个对象必须通知其他对象,而并不希望指定这些对象及如何通知它们时。

例如,在气象预报系统中,天气数据作为被观察者,而各种接收设备(如手机APP、网页展示等)作为观察者,当天气数据发生变化时,会自动通知所有订阅了天气数据的服务。

4. 迭代器模式详解及其应用场景

详解:
迭代器模式提供了一种方法顺序访问一个聚合对象的各个元素,而又不暴露其内部的表示。

在迭代器模式中,通常包含以下角色:

  • Iterator(迭代器)接口:定义获取下一个元素、检查是否还有元素的方法。
  • Concrete Iterator(具体迭代器)类:实现 Iterator 接口,遍历集合中的元素。
  • Aggregate(聚合)接口:定义创建迭代器对象的方法。
  • Concrete Aggregate(具体聚合)类:实现 Aggregate 接口,存储元素并返回对应的迭代器实例。

应用场景:
迭代器模式适用于以下场景:

  • 需要对容器内的元素进行顺序访问或随机访问,而又不希望暴露容器的内部结构时。
  • 在处理一组相似类型的对象时,能够提供一致的访问方式。

例如,在Java Collection Framework中,ArrayList、LinkedList等集合类都提供了迭代器,用于遍历集合中的元素。

5. 责任链模式详解及其应用场景

详解:
责任链模式使多个对象都有机会处理请求,避免请求发送者与接收者之间的耦合关系。请求沿着链传递,直到被正确处理为止。

在责任链模式中,通常包含以下角色:

  • Handler(处理器)接口或抽象类:定义处理请求的接口,包含指向下一个处理器的引用。
  • Concrete Handler(具体处理器)类:实现 Handler,能够处理特定的请求,也可以将请求转发给下一个处理器。

应用场景:
责任链模式适用于以下场景:

  • 多个对象可能需要处理同一请求,但是哪个对象处理请求由运行时决定。
  • 请求处理者以及它们之间的关系应当能够在运行时动态地重新配置。

例如,在企业审批流程中,每个审批节点都是一个处理器,根据请求内容的不同,请求从一个节点流向另一个节点,直至找到有权批准该请求的节点。

6. 命令模式详解及其应用场景

详解:
命令模式将请求封装为一个对象,使得可以用不同的请求对客户进行参数化;可以对请求排队或者记录请求日志,以及支持可撤销的操作。

在命令模式中,通常包含以下角色:

  • Command(命令)接口:声明执行命令的方法。
  • Concrete Command(具体命令)类:实现 Command 接口,绑定接收者并调用其操作。
  • Receiver(接收者)类:知道如何实施和执行一个请求相关的操作。
  • Invoker(调用者)类:要求命令对象执行请求。

应用场景:
命令模式适用于以下场景:

  • 需要在不同的时间点执行请求,或者将请求放入队列中。
  • 需要支持命令的撤销操作。
  • 将动作与动作的发起者解耦,使得发起者不必了解接收者细节。

例如,在图形用户界面中,按钮点击事件可以作为一个命令对象,点击后通过调用者触发命令执行,同时支持撤销操作。

7. 备忘录模式详解及其应用场景

详解:
备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。

在备忘录模式中,通常包含以下角色:

  • Originator(原发器)类:拥有一个复杂状态的对象,能够创建并恢复备忘录数据。
  • Memento(备忘录)类:存储 Originator 的内部状态,但对外部世界隐藏这些状态的具体信息。
  • Caretaker(管理者)类:持有备忘录对象,但不能对其内容进行操作,只负责保存和恢复。

应用场景:
备忘录模式适用于以下场景:

  • 需要保存和恢复对象的复杂状态,以便撤销操作或回滚到历史状态。
  • 需要在不影响对象本身的情况下保存对象状态。

例如,在文本编辑器中,可以利用备忘录模式保存文档的各个版本,方便用户随时撤销或恢复到某个历史版本。

8. 状态模式详解及其应用场景

详解:
状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。

在状态模式中,通常包含以下角色:

  • Context(环境)类:维护一个当前状态对象的引用,并将与状态有关的行为委托给当前状态对象。
  • State(状态)接口:定义所有具体状态类都要实现的接口。
  • Concrete State(具体状态)类:每个具体状态类对应一个状态,实现 State 接口,负责处理与当前状态相关的业务逻辑。

应用场景:
状态模式适用于以下场景:

  • 一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变其行为。
  • 避免使用大量的条件语句判断对象的状态。

例如,在ATM机中,账户状态(正常、冻结、透支等)会影响账户的取款、存款等功能,每种状态对应一个具体状态类,根据账户状态执行相应操作。

9. 访问者模式详解及其应用场景

详解:
访问者模式表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。

在访问者模式中,通常包含以下角色:

  • Visitor(访问者)接口:声明访问者可以访问哪些元素以及访问的结果是什么。
  • Concrete Visitor(具体访问者)类:实现了 Visitor 接口,定义对每个元素类的具体操作。
  • Element(元素)接口:声明接受 Visitor 的方法,一般为 accept(Visitor visitor)。
  • Concrete Element(具体元素)类:实现 Element 接口,具体存储数据,并调用访问者的方法。

应用场景:
访问者模式适用于以下场景:

  • 需要在不改变现有类的基础上扩展功能,即需要对一个复杂的对象结构中的元素进行很多不同操作时。
  • 对象结构中元素的类比较稳定,但其操作算法易变或者可能有许多不同的操作算法。

例如,在编译器设计中,可以定义一个抽象语法树(AST),节点代表源代码的不同部分。访问者模式可以用来实现类型检查、代码优化、错误检测等多种独立的遍历和处理逻辑,每种逻辑对应一个具体的访问者类。

10. 中介者模式详解及其应用场景

详解:
中介者模式用一个中介对象来封装一系列的对象交互,使原本直接关联的对象解耦,使得各对象之间不需要显式地相互引用,而是通过中介对象间接通信。

在中介者模式中,通常包含以下角色:

  • Mediator(中介者)接口或抽象类:定义了同事对象与中介者之间的交互方式。
  • Concrete Mediator(具体中介者)类:实现了 Mediator 接口,负责协调各个同事对象之间的交互行为。
  • Colleague(同事)类:定义同事对象,它们只知道中介者而不知道其他同事对象,通过调用中介者的方法与其他同事对象通信。

应用场景:
中介者模式适用于以下场景:

  • 多个对象之间存在复杂的依赖关系,导致系统难以理解和维护。
  • 当需要简化多个对象间的通信复杂性,降低耦合度时。

例如,在GUI框架中,事件调度器(如Java Swing中的Event Dispatch Thread)作为中介者,协调按钮、文本框等各种组件之间的事件传递和响应。

11. 解释器模式详解及其应用场景

详解:
解释器模式提供了一种用于表示可计算语句的语法表示,并定义了一个解释器来解释该表示并执行相应的运算。

在解释器模式中,通常包含以下角色:

  • AbstractExpression(抽象表达式)接口或抽象类:声明解释操作的公共接口,为所有具体表达式类提供统一的操作入口。
  • TerminalExpression(终结符表达式)类:实现抽象表达式接口,对应文法中的终端符号,通常直接产生结果。
  • NonterminalExpression(非终结符表达式)类:同样实现抽象表达式接口,对应文法中的非终结符,通常包含对其他子表达式的引用并进行组合运算。
  • Context(上下文)类:存储解析过程中所需的信息,为解释器提供运行环境。

应用场景:
解释器模式适用于以下场景:

  • 有一个简单的语言需要解释,且语言的规则相对固定且易于建模。
  • 可以将特定领域的问题抽象为一种语言或表达式,且需求是开发能够解释这种语言的解释器。

例如,在SQL查询解析器中,可以使用解释器模式将SQL语句转换成内部数据结构,然后进行查询操作。

12. 综述

通过以上对行为型设计模式的详解和应用场景分析,我们可以看到这些模式都致力于解决对象间交互和职责分配的问题,帮助开发者更好地组织程序结构,提高代码复用性和灵活性。在实际项目中灵活运用这些模式,有助于构建出更加健壮、易于维护和扩展的软件系统。

相关文章:

第四篇 行为型设计模式 - 灵活定义对象间交互

第四篇:行为型设计模式 - 灵活定义对象间交互 行为型设计模式关注对象之间的交互和职责分配,旨在定义对象间的高效、灵活的通信机制。以下是十一种常见行为型设计模式的详解及其应用场景。 1. 策略模式详解及其应用场景 详解: 策略模式定义…...

2023最新租号平台系统源码支持单独租用或合租使用

这是一款租号平台源码,采用常见的租号模式。目前网络上还很少见到此类类型的源码。 平台的主要功能如下: 支持单独租用或采用合租模式; 采用易支付通用接口进行支付; 添加邀请返利功能,以便站长更好地推广&#xf…...

数据库的连接

连接数据库 我们使用WinR输入cmd打开运行窗口 输入:sqlplus并回车 输入用户名和密码,我用的是Scott,密码我自己设置的123456,Scott默认的密码是tiger,回车 这种情况表示登录成功 在连接Scott成功的情况下创建一些数据,在我的资源里面有个Oracle数据基础可以下载,直接复制粘…...

第14课 利用openCV快速数豆豆

除了检测运动,openCV还能做许多有趣且实用的事情。其实openCV和FFmpeg一样都是宝藏开源项目,貌似简单的几行代码功能实现背后其实是复杂的算法在支撑。有志于深入学习的同学可以在入门后进一步研究算法的实现,一定会受益匪浅。 这节课&#…...

在前端利用Broadcast Channel实现浏览器跨 Tab 窗口通信的方法

Broadcast Channel 在前端,我们经常会用postMessage来实现页面间的通信,但这种方式更像是点对点的通信。对于一些需要广播(让所有页面知道)的消息,用postMessage不是非常自然。Broadcast Channel 就是用来弥补这个缺陷…...

【Apache Doris】自定义函数之 JAVA UDF 详解

【Apache Doris】自定义函数之 JAVA UDF 详解 一、背景说明二、原理简介三、环境信息3.1 硬件信息3.2 软件信息 四、IDE准备五、JAVA UDF开发流程5.1 源码准备5.1.1 pom.xml5.1.2 JAVA代码 5.2 mvn打包5.2.1 clean5.2.2 package 5.3 函数使用5.3.1 upload5.3.2 使用 六、注意事…...

BMS电池管理系统带充放电控制过流过压保护

2.4G无线采集BMS开发板(主从一体) 全新升级 (赠送上位机源码TTL 上位机,可以改成自己想要的界面) 12串电池TTL上位机 CAN通信上位机源码有偿开源,供项目二次开发。 增加STM32平台 USB转TTL通信 CAN通信 增加…...

在Linux中以后台静默运行Java应用程序

在Linux系统上运行Java应用程序时,有时我们希望将其设置为后台运行,而关闭终端窗口时不会影响进程的执行。在本文中,我们将介绍几种实现这一目标的方法。 1. 使用nohup命令 nohup是一个用于在后台运行进程的命令,而且关闭终端窗…...

k8s---Pod的生命周期

Pod是什么? pod是k8s中最小的资源管理组件。 pod也是最小化运行容器化应用的资源管理对象。 pod是一个抽象的概念,可以理解为一个或者多个容器化应用的集合 在一个pod当中运行一个容器是最常用的方式 在一个pod当中可以同时运行多个容器&#xff0c…...

CSS animation动画和关键帧实现轮播图效果HTML

CSS animation动画和关键帧实现轮播图效果HTML 这轮播图效果使用h5和css3实现效果&#xff0c;不需要js控制&#xff0c;但是其中的缺点就是不能使用鼠标进行切换效果。 具有代码如下 <!DOCTYPE html> <html lang"en"><head><meta charset&quo…...

Unity之键盘鼠标的监控

小编最近在玩大表哥2&#xff0c;通过 W、A、S、D 来移动亚瑟&#xff0c;鼠标左键来不吃牛肉 我们都知道玩家通过按键鼠标来控制游戏人物做出相应的行为动作&#xff0c;那在Unity引擎里是怎么知道玩家是如何操作的呢&#xff1f;本篇来介绍Unity是怎样监控键盘和鼠标的。 首先…...

C# windows服务程序开机自启动exe程序

我们使用传统的Process.Start(".exe")启动进程会遇到无法打开UI界面的问题&#xff0c;尤其是我们需要进行开启自启动程序设置时出现诸多问题&#xff0c;于是我们就想到采用windows服务开机自启动来创建启动一个新的exe程序&#xff0c;并且是显式运行。 首先是打开…...

【SpringMVC】常用注解

什么是MVC&#xff1f; MVC是一种程序分层开发模式&#xff0c;分别是Model&#xff08;模型&#xff09;&#xff0c;View&#xff08;视图&#xff09;以及Controller&#xff08;控制器&#xff09;。这样做可以将程序的用户界面和业务逻辑分离&#xff0c;使得代码具有良好…...

关于曲率、曲率半径和曲率圆,看这几篇文章就够啦

关于曲率、曲率半径和曲率圆的内容&#xff0c;是考研数学数学一和数学二大纲中明确要求掌握的内容&#xff0c;但这部分内容在很多教材教辅以及练习题中较少涉及。在本文中&#xff0c;荒原之梦考研数学网就为大家整理了曲率、曲率半径和曲率圆方程相关的概念、基础知识以及练…...

java面试题-Spring常见的异常类有哪些?

远离八股文&#xff0c;面试大白话&#xff0c;通俗且易懂 看完后试着用自己的话复述出来。有问题请指出&#xff0c;有需要帮助理解的或者遇到的真实面试题不知道怎么总结的也请评论中写出来&#xff0c;大家一起解决。 java面试题汇总-目录-持续更新中 NullPointerException&…...

数据库选择题 (期末复习)

数据库第一章 概论简答题 数据库第二章 关系数据库简答题 数据库第三章 SQL简答题 数据库第四第五章 安全性和完整性简答题 数据库第七章 数据库设计简答题 数据库第九章 查询处理和优化简答题 数据库第十第十一章 恢复和并发简答题 2015期末 1、在数据库中&#xff0c;下列说…...

WeNet语音识别+Qwen-72B-Chat Bot+Sambert-Hifigan语音合成

WeNet语音识别Qwen-72B-Chat Bot&#x1f47e;Sambert-Hifigan语音合成 简介 利用 WeNet 进行语音识别&#xff0c;使用户能够通过语音输入与系统进行交互。接着&#xff0c;Qwen-72B-Chat Bot作为聊天机器人接收用户的语音输入或文本输入&#xff0c;提供响应并与用户进行对话…...

是否需要跟上鸿蒙(OpenHarmony)开发岗位热潮?

前言 自打华为2019年发布鸿蒙操作系统以来&#xff0c;网上各种声音百家争鸣。尤其是2023年发布会公布的鸿蒙4.0宣称不再支持Android&#xff0c;更激烈的讨论随之而来。 本文没有宏大的叙事&#xff0c;只有基于现实的考量。 通过本文&#xff0c;你将了解到&#xff1a; Har…...

【Golang】Json 无法表示 float64 类型的 NaN 以及 Inf 导致的 panic

【Golang】Json 无法表示 float64 类型的 NaN 以及 Inf 导致的 panic 原因 golang 服务出现了 panic&#xff0c;根据 panic 打印出的堆栈找到了问题代码&#xff0c;看上去原因是&#xff1a;json 序列化时&#xff0c;遇到了无法序列化的内容 [panic]: json: unsupported …...

bootstrap5实现宠物商店网站 Cat-Master

一、需求分析 宠物商店网站是指专门为宠物商店或宠物用品商家而建立的在线平台。这种网站的功能通常旨在提供以下服务&#xff1a; 产品展示&#xff1a;宠物商店网站通常会展示宠物食品、玩具、床上用品、健康护理产品等各种宠物用品的图片和详细信息。这样&#xff0c;潜在的…...

基于多反应堆的高并发服务器【C/C++/Reactor】(中)创建并初始化TcpServer实例 以及 启动

对于一个TcpServer来说&#xff0c;它的灵魂是什么&#xff1f;就是需要提供一个事件循环EventLop(EventLoop)&#xff0c;不停地去检测有没有客户端的连接到达&#xff0c;有没有客户端给服务器发送数据&#xff0c;描述的这些动作&#xff0c;反应堆模型能够胜任。当服务器和…...

边缘计算设备是什么意思。

问题描述&#xff1a;边缘计算设备是什么意思。 问题解答&#xff1a; 边缘计算&#xff08;Edge Computing&#xff09;是一种计算模型&#xff0c;其主要思想是在距离数据产生源头更近的地方进行数据处理和计算&#xff0c;而不是将所有数据传输到远程云服务器进行处理。边…...

使用ChatGPT midjourney 等AI智能工具,能为视觉营销做些什么?

使用ChatGPT、Midjourney等AI智能工具&#xff0c;可以极大地提升视觉营销的效率和创意水平。以下是这些工具在视觉营销中的一些具体应用&#xff1a; 内容创作与文案撰写&#xff08;ChatGPT&#xff09; 广告文案生成&#xff1a;根据产品特点和目标受众&#xff0c;生成吸…...

图像分割实战-系列教程4:unet医学细胞分割实战2(医学数据集、图像分割、语义分割、unet网络、代码逐行解读)

&#x1f341;&#x1f341;&#x1f341;图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 unet医学细胞分割实战1 unet医学细胞分割实战2 unet医学细胞分割实战3 unet医学细胞分割实战4 unet…...

防火墙未开端口导致zookeeper集群异常,kafka起不来

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题描述&#xff1a; 主机信息&#xff1a; IPhostname10.0.0.10host1010.0.0.12host1210.0.0.13host13 在这三台主机上部署…...

React-hook-form-mui(二):表单数据处理

前言 在上一篇文章中&#xff0c;我们介绍了react-hook-form-mui的基础用法。本文将着表单数据处理。 react-hook-form-mui提供了丰富的表单数据处理功能&#xff0c;可以通过watch属性来获取表单数据。 Demo 下面是一个使用watch属性的例子&#xff1a; import React from…...

java网络文件地址url的转换为MultipartFile文件流

废话不多说&#xff0c;直接上代码 一、异常捕捉类 public class BusinessException extends RuntimeException {public BusinessException(String msg){super(msg);} }二、转换类 package com.example.answer_system.utils;import org.springframework.mock.web.MockMultipa…...

JS实现/封装节流函数

封装节流函数 节流原理&#xff1a;在一定时间内&#xff0c;只能触发一次 let timer, flag; /*** 节流原理&#xff1a;在一定时间内&#xff0c;只能触发一次* * param {Function} func 要执行的回调函数 * param {Number} wait 延时的时间* param {Boolean} immediate 是否立…...

ENVI 各版本安装指南

ENVI下载链接 https://pan.baidu.com/s/1APpjHHSsrXMaCcJUQGmFBA?pwd0531 1.鼠标右击【ENVI 5.6(64bit&#xff09;】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 ENVI 5.6(64bit&#xff09;】。 2.打开解压后的文件夹&#xff0c…...

60天零基础干翻C++————初识C++

初识c 命名空间命名空间的定义命名空间的使用 输入输出流缺省参数引用引用定义常量的引用引用的使用场景做函数参数引用做返回值 命名空间 命名空间的定义 在c语言中会有下面问题 上述代码中&#xff0c;全局变量rand 可能会命名冲突&#xff0c;如下图 此时编译失败&…...

网站独立ip/优化大师破解版app

Java 是一个通用术语&#xff0c;用于表示 Java 软件及其组件&#xff0c;包括“Java 运行时环境 (JRE)”和“Java 虚拟机 (JVM)”。相信很多用户都用过JAVA程序,它的应用不只是在手机,各种平台都有其用武之地。在PC平台上运行Java程序时&#xff0c;有时候会提示你缺少Java环境…...

php网站开发的相关技术/软文推广例子

例题&#xff1a; 对下方出现的电话号码进行加密 需求最终效果: 客户1&#xff1a;181****5458&#xff0c;客户2&#xff1a;139****0342 tel "客户1&#xff1a;18119285458&#xff0c;客户2&#xff1a;13937560342" 一、最简单的方法&#xff1a; # 字…...

网站的图片滚动怎么做的/重庆搜索引擎seo

这ListView真是麻烦&#xff0c;一个小小的FileBrowser废了将近2天。看来自己的功力还需要加强。 做FileBrowser中遇到几个ListView问题总结一下。 1、自定义样式 ListView其实和Asp.net里面的Repeater有点像&#xff0c;但是不同的是项的内容可以用一个layout文件来套用&#…...

高端网站建站 北京/冯耀宗seo

首先我们分享项目到GitHub上在菜单上选择VCS&#xff0c;在下拉列表中选择Import into Version Control&#xff0c;再选择Share project on Github输入仓库的描述信息&#xff0c;点击Share选择要提交的文件&#xff0c;忽略不需要提交的文件&#xff0c;填写注释&#xff0c;…...

如皋做网站的公司/有哪些网络营销公司

一、自主切换IP该模式适合一些需要登陆、Cookie缓存处理等爬虫需要精确控制IP切换时机的业务。 爬虫程序可以通过设置HTTP头Proxy-Tunnel: 随机数&#xff0c; 当随机数相同时,访问目标网站的代理IP相同。例如需要登录,获取数据两个请求在一个IP下,只需对这组请求设置相同Proxy…...

石家庄做网站/杭州哪家seo公司好

比较常见的几款车的车标 相信车标大家已经很熟悉了&#xff0c;但不乏有几款不太常见的&#xff0c;所以罗列所有&#xff0c;把最常见的几款车标奉上&#xff0c;国产的品牌没有几个&#xff0c;纯属个人爱好&#xff0c;勿怪。 奥迪宝马保时捷奔驰 下载次数:4 2009-8-30 14:…...