自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(395)
  • 收藏
  • 关注

原创 一文讲清chatGPT的发展历程、能力来源和复现它的关键之处

chatGPT是什么?这可能是最近被问的最多的一个。大家第一反应这应该是GPT系列的一个最新模型,普通大众可能更愿意把它看做是一个人工智能。实际上,它其实就是一个基于大规模语言模型的对话系统产品。官网对它定义十分的明确:Optimizing Language Models for Dialogue.最大的问题在于,它的背后究竟是一个什么?很多人都以为,chatGPT是一个单一模型,就如同GPT-1/2一样,应该是一个可以被加载和训练的。

2023-02-12 16:46:16 38512 19

原创 [ChatGPT为你支招]如何提高博客的质量,找到写作方向,保持动力,增加粉丝数?

作为一个博主,您可能会面临很多挑战,比如如何提高博客的质量,如何找到自己的写作方向,如何保持持续写作的动力,以及如何增加博客的粉丝数量。在这篇文章中,我们将为您提供一些有用的建议,帮助您解决这些问题,让您的博客更加精彩。

2022-12-10 10:22:28 2398 1

原创 chatGPT与世界杯的故事:人工智能的双重面对

(本文是 CSDN 的世界杯征文)在本文中,我们将借助chatGPT的智慧,一起探究世界杯与人工智能之间的关系,并展望人工智能在体育领域的应用。同时,我们也将思考人工智能如何影响着我们的生活,以及我们对人工智能的看法。标题:我的第一次踢球:从紧张到自信的旅程2002年的夏天,我第一次拿起了足球。一开始,我非常紧张。我手心汗湿,拿着球的时候我都害怕掉了。我不知道怎么踢,所以我就踢了一脚脚后跟。球从我的脚尖飞了出去,没有任何力量。我感觉自己很笨,也很沮丧。但是,我并没有放弃。我继续练习,一次又一次地踢球。慢慢

2022-12-07 12:14:43 11500 37

原创 科研论文撰写相关工具一条龙服务指南

我们科研论文撰写过程需要很多注意的部分,例如,选择撰写平台、latex的图表的设计和制作,为自己的模型起一个名字,英文写作,还有参考文献的搜集和整理,以及适合的投稿会议候选等。本文将一条龙的介绍下去,保证科研论文撰写中遇到的主要困难都能够得到很好的解决。

2021-11-30 18:23:56 937 1

原创 增加你的生产力!VS Code程序员鼓励师插件,你值得拥有!

1. 前言前几日,我们还在红警优美的代码中沉醉,最近这几天,我们又发现宝了!一个鼓励你写代码的插件!它声称可以在你写代码的时候,给你鼓励,伴你前行!它具体是个什么东西呢?我们先来看看一个第三方的评价吧:简而言之,就是能根据代码关键词,播放贴近代码意义的语音,在你编程的过程中,疯狂输出赞美。真的是,萝莉音程序员鼓励师24小时在线,陪你 coding 到天明。内置中文语音包采用真人语音,支持 JavaScript 语言的常用关键字(支持到 ES6 版本)。不仅如此,还有专门针对时间的语音。比如连

2020-06-22 15:51:43 25802 66

原创 惊艳于红警开源代码?赏心悦目的代码注释,我们也可以 !

这几天,红警1的开源代码重现江湖,这个20年前,甚至25年前的代码,被我们所有的后来者所惊叹,这才是一个艺术品一般的存在。那么如果我们也想写出如此优美的代码,应该注意的事项有哪些?本文将讲述3个编码时需要注意的部分,并着重讲解如何编写出规范的代码注释并加以利用。

2020-06-10 13:55:45 33877 52

原创 看一次就会的python正则表达式的使用指南

前言正则表达式作为一名合格的程序员的必备的基本技术之一,其有用性不言而喻。但是它为什么会非常难以掌握,甚至想用一用也都感觉难以下手呢?本文将会让你一次就看会如何使用Python正则表达式。1. 正则表达式的组成在介绍如何使用Python的正则表达式时,我们需要先认识一下正则表达式的各种功能,以及其组成形式如何。正则表达式可以从非结构化的文本中提取到我们想要的内容,其本质为模式匹配,也是体现...

2020-03-06 22:31:11 11439 21

原创 3年长跑,修成正果

文章目录相遇相识相知相恋相守我和CSDN的故事很短,只有6个字:“人生若如初见”;我和CSDN的故事很长,我要用一生去讲。相遇2014年,我在计算机科学与技术这个曾经“万金油”的苦海里苦苦挣扎时,偶然间遇到了CSDN。无论什么问题,她都会耐心的解答。我需要什么材料,她都能给我帮助。在专业领域中,我感觉到她什么都知道。她的亲切、温柔、耐心、博学,还有她的美丽,让我一见钟情。我自认为自己幸运,...

2019-10-12 21:25:28 2731 27

转载 一文看懂25个神经网络模型

1. 引言在深度学习十分火热的今天,不时会涌现出各种新型的人工神经网络,想要实时了解这些新型神经网络的架构还真是不容易。光是知道各式各样的神经网络模型缩写(如:DCIGN、BiLSTM、DCGAN……还有哪些?),就已经让人招架不住了。因此,这里整理出一份清单来梳理所有这些架构。其中大部分是人工神经网络,也有一些完全不同的怪物。尽管所有这些架构都各不相同、功能独特,当我在画它们的节点图时……其中潜在

2017-06-17 10:26:08 247795 22

原创 段落向量与句子向量表达

这是Tomas Mikolov的一篇关于段落向量和句子向量的论文。本文是我翻译加自我理解的结果,如需要更详细的介绍,请看英文文献。摘要许多机器翻译的算法都需要使用固定长度的词向量特征。在到达文本层面时,我我们最常用的一个固定长度的特征时词袋模型。尽管他们很流行,但是词袋模型有两大缺点:1、失去了词序特征;2、忽略了语义特征,例如,powerful与strong和Paris距离都是非常远的。在本文中,

2017-05-20 17:08:27 28399 20

原创 25_先进先出与后进先出结合问题

老鸟:首先,FIFO(First In, First Out)是一种数据结构原理,最早进入的数据会最早被处理,比如队列。相反,LIFO(Last In, First Out)则是后进先出,类似堆栈,最后进入的数据会最早被处理。这两种结构在不同场景下各有用处。菜鸟:那它们怎么结合在一起呢?老鸟:一个常见的应用场景是需要同时支持快速的插入、删除和访问最新元素。我们可以通过双端队列(Deque)来实现,这种数据结构支持从两端进行插入和删除操作。老鸟。

2024-09-11 02:06:00 444

原创 24_竞赛中的高效并查集

老鸟查找(Find)和合并(Union)。查找操作用于确定一个元素属于哪个集合,合并操作用于将两个不同的集合合并成一个集合。在竞赛中,我们通常会对并查集进行一些优化,使其更加高效。菜鸟:听起来有点抽象,能不能给我举个例子?老鸟:当然。假设我们有一些节点,每个节点代表一个用户。最开始,每个用户都在自己的独立群组中。我们可以通过合并操作将不同用户的群组合并起来,通过查找操作检查两个用户是否在同一个群组。老鸟:今天我们讨论了并查集的基本概念、优化方法及其应用场景。

2024-09-11 02:04:43 414

原创 23_线段树的应用与优化

老鸟:好的。线段树是一种二叉树,用于存储区间或线段的信息。它允许你在对数组进行区间查询和更新时,都能在对数时间内完成。让我们一步步来了解它吧。老鸟:今天我们通过对话,了解了线段树的基本概念、构建方法、优化技巧以及适用场景。线段树是一种非常强大的数据结构,能够在对数时间内完成区间查询和更新操作,非常适合处理大规模区间操作。

2024-09-11 02:03:33 528

原创 22_图论中的高级数据结构

菜鸟:听起来不错,能先讲讲邻接表吗?老鸟:好的。邻接表是一种更为内存友好的图表示方法。相比邻接矩阵,邻接表的空间复杂度是O(V + E),其中V是顶点数,E是边数。在邻接表中,每个顶点都会有一个列表,列表中存储与该顶点相邻的所有顶点。# 邻接表的表示方法graph = {菜鸟:这个看起来更直观一些,查询一个顶点的邻居也很方便。老鸟:是的,而且插入和删除操作也相对简单。让我们继续深入一些,看看如何使用邻接表进行图的遍历。老鸟:今天我们讨论了邻接表、DFS、BFS、以及Dijkstra算法。

2024-09-11 02:02:22 668

原创 21_动态规划与数据结构结合

老鸟:假设你有一个数组arr,你需要多次查询某个子数组arr[i:j]的和。直接计算会很慢,我们可以用动态规划预处理,再用一种数据结构来快速查询。菜鸟:听起来不错,但具体怎么做呢?老鸟:我们可以先构建一个数组prefixSum,其中表示数组arr从起始位置到i的和。这样每次查询arr[i:j]的和时,可以用来快速计算。菜鸟:这样确实能减少计算量,但构建prefixSum数组需要什么操作呢?老鸟:好问题。我们来看看代码示例。老鸟:今天我们讨论了动态规划与数据结构结合的应用,通过prefixSum。

2024-09-11 02:01:15 580

原创 20_二叉搜索树的优化

菜鸟: 二叉搜索树?能具体讲讲吗?老鸟: 当然。二叉搜索树是一种特殊的二叉树,它的每个节点都有一个键值,并且每个节点的左子树的所有键值都小于该节点的键值,右子树的所有键值都大于该节点的键值。这种结构使得查找、插入和删除操作都可以在平均O(log n)的时间复杂度内完成。菜鸟: 听起来不错。那具体怎么实现呢?老鸟: 总结一下,二叉搜索树是一种高效的数据结构,可以优化插入和查找操作的性能。通过实现平衡二叉搜索树,我们可以确保操作的时间复杂度在O(log n)内。

2024-09-11 01:58:39 332

原创 19_字典树与字符串匹配

老鸟:字典树是一种树形结构,每个节点代表一个字符。通过节点的连接,我们可以形成一个单词。比如,单词 “apple” 在字典树中就是从根节点依次连接 ‘a’ -> ‘p’ -> ‘p’ -> ‘l’ -> ‘e’。菜鸟:听起来有点抽象,能具体一点吗?老鸟:没问题,让我们通过代码来一步步构建字典树。菜鸟:明白了,TrieNode是字典树的节点,每个节点包含一个子节点的字典和一个标识是否是单词结尾的布尔值。老鸟:对的。接下来,我们来看看如何向字典树中插入单词。老鸟。

2024-09-11 01:57:37 289

原创 18_并查集优化

老鸟:并查集是一种树型数据结构,用于处理不相交集合的合并及查询问题。常用的操作是“查找(Find)”和“合并(Union)”。通过优化这些操作,我们可以将其复杂度降到近乎常数时间。菜鸟:听起来很高效。具体怎么操作呢?老鸟:我们先从基本的并查集结构开始,然后再讲如何优化。假设我们有一个数组parent,其中parent[i]表示元素i的父节点。初始时,每个元素都是它自己的父节点,即每个元素单独成一个集合。= rootY:菜鸟:上面的代码看起来比较简单,但为什么find。

2024-09-11 01:53:52 973

原创 17_哈希表冲突处理

老鸟:首先,我们来看一下哈希表冲突处理的两种主要方法:开放地址法和链地址法。我们先从链地址法开始。菜鸟:链地址法?是什么意思?老鸟:简单来说,链地址法是为每个哈希表槽位维护一个链表(或其他数据结构),所有映射到同一槽位的元素都存储在这个链表中。老鸟:总结一下,哈希表冲突处理主要有链地址法和开放地址法。链地址法使用链表存储冲突元素,而开放地址法则在哈希表内寻找新的空槽位。每种方法有其优缺点,适用于不同的场景。菜鸟你能推荐一些延伸阅读的资源吗?老鸟:当然可以。《算法导论》——哈希表章节。

2024-09-11 01:37:08 391

原创 16_LRU缓存机制

老鸟:LRU缓存的核心思想是,当缓存满了之后,淘汰最近最少使用的数据。这样可以保证我们经常访问的数据保留在缓存中,从而减少数据库的访问次数。我们先来看看一个简单的实现吧。菜鸟:听起来不错,能具体讲讲它是怎么操作的吗?老鸟:好的,我们通过一个Python代码示例来一步步理解LRU缓存的工作原理。老鸟:今天我们讨论了LRU缓存机制的基本原理、实现方法及其优化。LRU缓存通过淘汰最近最少使用的数据来提高数据访问效率。我们还用具体的代码示例讲解了如何实现和优化LRU缓存,希望你能有一个更深入的理解。菜鸟。

2024-09-11 01:36:32 776

原创 15_分布式数据结构

老鸟:我们先从一个简单的例子开始。假设你有一个大表格,数据量非常大,单台机器处理起来很慢。这时候,如果我们把表格分成几部分,分别放到不同的机器上去处理,是不是就会快很多?菜鸟:听起来是这样,但具体怎么做呢?老鸟:这就是分布式数据结构的核心思想。通过将数据分片,分布在多个节点上进行并行处理。我们来看看一个简单的代码示例。老鸟:今天我们讨论了分布式数据结构的基本概念、操作细节和一些优化方法。你可以进一步学习一致性哈希、分布式文件系统(如HDFS)和分布式数据库(如Cassandra、MongoDB)。

2024-09-11 01:33:06 549

原创 14_L3缓存友好的数据结构

老鸟:L3缓存是CPU缓存层次结构中的第三层,通常比L1和L2缓存大,但访问速度稍慢。L3缓存友好的数据结构设计旨在最大限度地减少缓存未命中,从而提升性能。菜鸟:那这些数据结构有什么特点呢?老鸟:主要特点是数据局部性好,也就是说,数据在内存中是连续存储的,这样能更好地利用缓存行。我们可以从一个简单的例子开始,比如数组和链表的对比。老鸟:总结一下,L3缓存友好的数据结构通过提升数据局部性来提高性能。常见的有数组、等。它们在大数据处理和高性能计算中非常有用。但在实际应用中,需要权衡性能、可维护性和具体需求。

2024-09-11 01:30:06 702

原创 13_动态数组与缓存优化

老鸟:首先,我们来看看动态数组。动态数组是一种能够自动调整其大小的数组。你知道它是如何工作的么?菜鸟:不是很清楚,能具体讲讲吗?老鸟:当然。动态数组在初始化时分配一个固定大小的内存,当需要插入元素时,如果数组已满,它会分配一个更大的内存块并将现有元素复制过去。这样一来,它就能容纳更多的元素了。菜鸟:听起来不错,那缓存优化又是怎么回事?老鸟:缓存优化是指利用 CPU 缓存来加速数据访问。动态数组的连续内存分配有利于缓存优化,因为数据在内存中是连续存储的,这样 CPU 可以高效地预取数据。老鸟。

2024-09-11 01:27:24 534

原创 12_持久化数据结构

老鸟:持久化数据结构是一种在更新数据时不会破坏原数据结构的技术。它允许你保留旧版本的数据结构,同时生成一个新的版本。这样,你可以在需要时回溯到任何一个历史版本。持久化数据结构分为部分持久化和完全持久化。部分持久化只允许访问最新版本,而完全持久化允许访问所有历史版本。菜鸟:听起来很有意思,这个东西怎么实现呢?老鸟:我们可以通过一些巧妙的技术来实现,比如结构共享。举个简单的例子,我们来看看如何在纯函数式编程中实现持久化链表。老鸟:总结一下,持久化数据结构通过结构共享,实现了在不破坏原数据结构的基础上进行更新。

2024-09-11 01:26:28 560

原创 11_跳表(Skip List)

老鸟:跳表通过在链表上增加多级索引,使得查找、插入和删除操作的平均时间复杂度都可以达到O(log n)。我们先从基本概念开始。菜鸟:听起来不错,能具体解释一下吗?老鸟:当然。假设我们有一个有序链表,跳表在这个基础上增加了多层索引。第一层是原始链表,第二层是每两个节点挑选一个节点作为索引,第三层是第二层中每两个节点挑选一个节点作为索引,以此类推。菜鸟:这样做的好处是什么?老鸟:这样可以大幅减少查找的步骤。假设我们要查找某个元素,可以从最高层索引开始,逐层向下查找,大大减少了需要遍历的节点数。老鸟。

2024-09-11 01:15:07 718

原创 10_线段树与树状数组

老鸟:那我们先从树状数组(Fenwick Tree)开始吧。树状数组是一种可以高效处理前缀和查询和单点更新的数据结构。菜鸟:听起来不错,那它是怎么工作的?老鸟:树状数组通过维护一个辅助数组BIT,可以在 O(log n) 时间复杂度内完成前缀和查询和单点更新。具体来说,树状数组利用了二进制的特性,通过一些巧妙的索引运算来实现快速更新和查询。老鸟:总结一下,树状数组适用于前缀和查询和单点更新,线段树则适用于更复杂的区间查询和更新。它们分别是 O(log n) 的时间复杂度,非常适合处理大规模数据。菜鸟老鸟。

2024-09-11 01:14:31 305

原创 09_图与最短路径

老鸟:首先,我们来看一下什么是图。图是一种数据结构,由节点(也叫顶点)和边组成。节点代表实体,边代表它们之间的连接。图可以是有向的或无向的,有权重的或无权重的。菜鸟:那最短路径呢?老鸟:最短路径是指在图中从一个节点到另一个节点的路径中,边的总权重最小的路径。常用的最短路径算法有Dijkstra算法、Bellman-Ford算法等。接下来,我们用Dijkstra算法来找最短路径。老鸟:今天我们讨论了图和最短路径的概念,介绍了如何使用Dijkstra算法及其优化版本来求解最短路径。希望这些内容对你有所帮助。

2024-09-11 01:10:02 323

原创 08_并查集

并查集是一种数据结构,用于处理不相交集合的合并(Union)和查找(Find)操作。Find和Union。Find操作用于查找元素所属的集合,Union操作用于合并两个集合。是的,总结一下,并查集是一种处理不相交集合操作的数据结构,通过路径压缩和按秩合并,可以在近似常数时间内完成查找和合并操作。你可以继续深入学习一些相关的书籍和文档,比如《算法导论》中关于并查集的章节,或者一些高级的数据结构与算法书籍。

2024-09-11 01:07:34 487

原创 07_字典树(Trie)

菜鸟:字典树?那是什么东西?老鸟:字典树是一种树形结构,特别适合处理字符串。它能高效地进行插入、删除和查找操作。每个节点代表一个字符,路径从根节点到某个节点的字符串就是该节点代表的字符串。菜鸟:听起来有点抽象,你能给我举个例子吗?老鸟catcardog。root/ \c d/ \ \a a o/ \ \t r g老鸟:总的来说,字典树在处理字符串集合时有很大的优势,尤其是前缀匹配操作。它的插入、查找和删除操作时间复杂度都为 O(m),其中 m 是单词的长度。

2024-09-11 01:06:47 1170

原创 06_自平衡二叉搜索树

老鸟:当然。自平衡二叉搜索树是一种在每次插入或删除操作后,通过旋转操作保持树的平衡,使得树的高度保持在 (O(\log n)) 的数据结构。常见的自平衡二叉搜索树有AVL树和红黑树。我们先从AVL树说起吧。菜鸟:好的,AVL树有什么特点?老鸟:AVL树是一种严格平衡的二叉搜索树,任何一个节点的两个子树的高度差不会超过1。这使得AVL树的查找、插入和删除操作的时间复杂度都可以保持在 (O(\log n))。老鸟:今天我们讨论了自平衡二叉搜索树,特别是AVL树。我们了解了其核心操作、适用场景及其复杂度分析。

2024-09-11 01:06:07 602

原创 05_堆与优先队列

老鸟:当然可以。首先,我们来了解一下堆。堆是一种特殊的二叉树,它满足堆性质:对于最大堆,任何一个父节点的值都大于或等于其子节点的值;而对于最小堆,任何一个父节点的值都小于或等于其子节点的值。菜鸟:听起来有点抽象。堆具体能做什么呢?老鸟:堆主要用于实现优先队列。优先队列是一种特殊的队列,每次出队操作都会返回当前队列中优先级最高的元素。优先队列可以用堆来高效实现。老鸟:今天我们介绍了堆和优先队列的基本概念、核心操作及其复杂度分析。

2024-09-11 01:05:31 343

原创 04_树与二叉树

老鸟:首先,树是一种非线性数据结构,由节点(node)组成。每个节点包含一个值(value)和若干子节点(children)。树的顶端节点称为根节点(root),而没有子节点的节点称为叶节点(leaf)。菜鸟:明白了,那二叉树呢?老鸟:二叉树是一种特殊的树结构,每个节点最多有两个子节点,通常称为左子节点(left child)和右子节点(right child)。这种结构非常适合表达层次关系的数据。老鸟:总结一下,二叉树是一种重要的数据结构,适合表达层次关系的数据。其核心操作包括插入、查找和遍历。

2024-09-11 01:04:14 320

原创 03_哈希表

老鸟:哈希表,也叫散列表,是一种通过哈希函数将键映射到值的数据结构。它的核心思想是将数据分配到一个固定大小的“桶”中,通过哈希函数计算出每个键的索引位置。这样查找、插入和删除操作都能在常数时间内完成。菜鸟:那听起来很高效,能具体讲讲吗?老鸟:今天我们通过对话了解了哈希表的基本概念、实现方式及其适用场景。哈希表是一种强大的数据结构,在许多应用中都能显著提升性能。

2024-09-11 01:01:56 241

原创 02_栈与队列

老鸟:栈和队列都是线性数据结构,但它们有不同的操作规则。栈是后进先出(LIFO,Last In First Out)的结构,而队列是先进先出(FIFO,First In First Out)的结构。菜鸟:能具体解释一下吗?老鸟:当然。栈就像是一叠盘子,新的盘子总是放在最上面,取盘子时也是从最上面取。队列则像排队买票,先来的人先买票,后到的人排在队尾。老鸟:今天我们介绍了栈和队列的核心操作、适用场景及其复杂度分析。希望你能通过这些示例更好地理解它们。

2024-09-11 00:46:08 423

原创 01_数组与链表

老鸟:数组是一种线性数据结构,用于存储相同类型的元素。数组的元素在内存中是连续存储的,所以可以通过索引快速访问。# 数组示例菜鸟:嗯,这个我知道,可以通过索引快速访问,比如array[2]就可以得到3。老鸟:对,但插入和删除数据时,数组并不高效。如果你要在数组中间插入或删除元素,需要移动其他元素。老鸟:总结一下,数组和链表各有优缺点。数组适合快速访问元素,但在插入和删除操作上性能较差。链表适合频繁插入和删除,但在随机访问时性能较差。

2024-09-11 00:25:16 441

原创 漫谈设计模式 [21]:备忘录模式

老鸟:想象一下你在写一篇文章,每隔一段时间你都会保存一份草稿。这样,如果你不小心写错了东西,你可以回到之前的某个草稿,重新开始写。这种保存和恢复的机制,就是备忘录模式的核心思想。菜鸟:哦,我明白了。就是保存某个状态,然后可以在需要的时候恢复这个状态,对吧?老鸟:没错!备忘录模式正是通过这种方式工作。接下来,我们用Python代码来逐步实现这个模式。老鸟:今天我们通过对话了解了备忘录模式的基本概念和实现方式。它在不破坏封装的情况下,能够捕获和恢复对象的内部状态,非常适用于需要撤销操作的场景。菜鸟。

2024-09-07 23:48:01 1019

原创 漫谈设计模式 [20]:解释器模式

老鸟:解释器模式是一种设计模式,用于定义一种语言的语法表示,并提供一个解释器来解释这些表示。简单来说,它可以帮助我们解析和执行特定语言的语法规则。菜鸟:听起来很高深,有没有简单一点的例子?老鸟:当然有。想象一下,我们有一个简单的算术表达式,比如 “3 + 5”。我们需要一个程序来解析这个表达式并计算其结果。解释器模式就可以帮我们实现这个任务。老鸟:今天我们讨论了解释器模式的基本概念、实现方式及其优势和适用场景。你觉得如何?菜鸟:非常有趣!我对解释器模式有了初步的了解。你能推荐一些延伸阅读的资源吗?老鸟。

2024-09-07 23:46:48 1288

原创 漫谈设计模式 [19]:责任链模式

老鸟:责任链模式的核心思想是将多个处理器(或处理对象)组成一条链,每个处理器有机会对请求进行处理或将其传递给下一个处理器。就像生活中的任务分工一样,有人负责审查,有人负责审批。菜鸟:哦,这样听起来挺像流水线作业的,每个人负责一部分。老鸟:没错。责任链模式就是要将请求的处理分割成多个步骤,每个步骤由不同的对象处理。老鸟:今天我们讨论了责任链模式,它可以帮助你简化代码、提高扩展性,并明确职责分离。你可以参考《设计模式:可复用面向对象软件的基础》这本书,深入了解更多设计模式。菜鸟。

2024-09-07 23:45:51 1278

原创 漫谈设计模式 [18]:策略模式

老鸟:想象一下,你去一家咖啡店,店里提供了不同的支付方式:现金支付、信用卡支付和移动支付。每种支付方式都有不同的处理方式,但最终目的是一样的——完成支付。这就像策略模式中的不同策略,每个策略都是一个独立的算法实现。菜鸟:这样说我大概明白了。那在代码中该怎么实现呢?老鸟:我们可以用Python来实现。首先,我们定义一个支付策略的接口,然后实现几个具体的支付策略。老鸟:今天我们通过一个简单的例子,逐步了解了策略模式的概念、实现以及它的优势和适用场景。

2024-09-07 23:43:23 1721

原创 漫谈设计模式 [17]:状态模式

老鸟:我明白了。这种方式确实可以工作,但随着状态和操作的增多,代码会变得越来越复杂。我们可以用状态模式来改进这个问题。状态模式的核心思想是:将状态和行为封装在独立的状态类中,通过改变状态对象来改变对象的行为。菜鸟:听起来有点抽象,能不能用一个简单的例子解释一下?老鸟:当然可以。你可以把订单的状态比作交通灯,不同的灯光对应不同的行为。比如,红灯停,绿灯行,黄灯警告。每种灯光都是一种状态,不同状态下有不同的行为。pass菜鸟:这些类看起来很清晰,每个状态类都实现了OrderState。

2024-09-07 23:42:06 1588

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除