漫谈设计模式【菜鸟与老鸟的对话】
文章平均质量分 83
设计模式是一个非常有用的技能,它的前置技术是数据结构。很早之前看过《大话设计模式》,受益匪浅。如今是python的时代,借助大模型的力量,复习一遍设计模式。
AI让世界更懂你
计算机科学与技术专业博士,主要研究方向为人工智能、自然语言处理、大规模语言模型和对话系统等。曾与微软小冰、微软小娜共同工作。兴趣广泛,包括并不限于人工智能,心理学,认知科学,语言学,数学,天文学等。让我们一起和AI,改进世界!
展开
-
漫谈设计模式 [21]:备忘录模式
老鸟:想象一下你在写一篇文章,每隔一段时间你都会保存一份草稿。这样,如果你不小心写错了东西,你可以回到之前的某个草稿,重新开始写。这种保存和恢复的机制,就是备忘录模式的核心思想。菜鸟:哦,我明白了。就是保存某个状态,然后可以在需要的时候恢复这个状态,对吧?老鸟:没错!备忘录模式正是通过这种方式工作。接下来,我们用Python代码来逐步实现这个模式。老鸟:今天我们通过对话了解了备忘录模式的基本概念和实现方式。它在不破坏封装的情况下,能够捕获和恢复对象的内部状态,非常适用于需要撤销操作的场景。菜鸟。原创 2024-09-07 23:48:01 · 1035 阅读 · 0 评论 -
漫谈设计模式 [20]:解释器模式
老鸟:解释器模式是一种设计模式,用于定义一种语言的语法表示,并提供一个解释器来解释这些表示。简单来说,它可以帮助我们解析和执行特定语言的语法规则。菜鸟:听起来很高深,有没有简单一点的例子?老鸟:当然有。想象一下,我们有一个简单的算术表达式,比如 “3 + 5”。我们需要一个程序来解析这个表达式并计算其结果。解释器模式就可以帮我们实现这个任务。老鸟:今天我们讨论了解释器模式的基本概念、实现方式及其优势和适用场景。你觉得如何?菜鸟:非常有趣!我对解释器模式有了初步的了解。你能推荐一些延伸阅读的资源吗?老鸟。原创 2024-09-07 23:46:48 · 1292 阅读 · 0 评论 -
漫谈设计模式 [19]:责任链模式
老鸟:责任链模式的核心思想是将多个处理器(或处理对象)组成一条链,每个处理器有机会对请求进行处理或将其传递给下一个处理器。就像生活中的任务分工一样,有人负责审查,有人负责审批。菜鸟:哦,这样听起来挺像流水线作业的,每个人负责一部分。老鸟:没错。责任链模式就是要将请求的处理分割成多个步骤,每个步骤由不同的对象处理。老鸟:今天我们讨论了责任链模式,它可以帮助你简化代码、提高扩展性,并明确职责分离。你可以参考《设计模式:可复用面向对象软件的基础》这本书,深入了解更多设计模式。菜鸟。原创 2024-09-07 23:45:51 · 1284 阅读 · 0 评论 -
漫谈设计模式 [18]:策略模式
老鸟:想象一下,你去一家咖啡店,店里提供了不同的支付方式:现金支付、信用卡支付和移动支付。每种支付方式都有不同的处理方式,但最终目的是一样的——完成支付。这就像策略模式中的不同策略,每个策略都是一个独立的算法实现。菜鸟:这样说我大概明白了。那在代码中该怎么实现呢?老鸟:我们可以用Python来实现。首先,我们定义一个支付策略的接口,然后实现几个具体的支付策略。老鸟:今天我们通过一个简单的例子,逐步了解了策略模式的概念、实现以及它的优势和适用场景。原创 2024-09-07 23:43:23 · 1728 阅读 · 0 评论 -
漫谈设计模式 [17]:状态模式
老鸟:我明白了。这种方式确实可以工作,但随着状态和操作的增多,代码会变得越来越复杂。我们可以用状态模式来改进这个问题。状态模式的核心思想是:将状态和行为封装在独立的状态类中,通过改变状态对象来改变对象的行为。菜鸟:听起来有点抽象,能不能用一个简单的例子解释一下?老鸟:当然可以。你可以把订单的状态比作交通灯,不同的灯光对应不同的行为。比如,红灯停,绿灯行,黄灯警告。每种灯光都是一种状态,不同状态下有不同的行为。pass菜鸟:这些类看起来很清晰,每个状态类都实现了OrderState。原创 2024-09-07 23:42:06 · 1595 阅读 · 0 评论 -
漫谈设计模式 [16]:中介者模式
老鸟:我们可以用一个简单的生活例子来理解中介者模式。想象一下,你在一个公司工作,公司里有很多同事。如果每个同事都需要直接和其他所有同事沟通,整个沟通过程会非常混乱,对吧?菜鸟:对啊,人越多越难管理。老鸟:所以,公司通常会有一个中介——比如一个经理。所有的沟通都通过经理来进行。同事A想和同事B沟通,他只需要告诉经理,经理再去通知同事B。这样,沟通就变得简单和有序了。这就是中介者模式的核心思想。菜鸟:哦,我明白了。中介者模式是通过一个中介来简化对象之间的通信。老鸟。原创 2024-09-07 23:40:08 · 919 阅读 · 0 评论 -
漫谈设计模式 [15]:观察者模式
老鸟:我们先从生活中的例子聊起吧。假设你是个新闻记者,每当有重大新闻发生时,你需要通知各种媒体平台,比如电视、电台、报纸等。每次你都得一个一个通知,感觉很麻烦吧?菜鸟:是啊,如果能一次通知所有人就好了。老鸟:没错,这就是观察者模式的核心思想。你可以把自己看作"被观察者"(Subject),而那些需要通知的媒体平台看作"观察者"(Observer)。当有新闻发生时,你只需要告诉所有观察者,他们自己会去更新。老鸟:今天我们聊了观察者模式,主要解决了同步更新的问题,核心是解耦和易于扩展。原创 2024-09-07 23:39:26 · 746 阅读 · 0 评论 -
漫谈设计模式 [14]:迭代器模式
当然可以!我们先从一个生活中的例子开始。想象你有一本书,你想一页一页地阅读。你会一页一页地翻,而不是一次性把所有页都看完,对吧?迭代器模式就是这样的一个“翻页器”,它让你可以逐个处理集合中的元素,而不需要关心集合的内部结构。今天我们聊了迭代器模式的核心思想、基本实现以及它的优势和适用场景。希望你对迭代器模式有了更深入的理解。接下来你可以阅读《设计模式:可复用面向对象软件的基础》这本书,了解更多设计模式。原创 2024-09-07 23:38:14 · 755 阅读 · 0 评论 -
漫谈设计模式 [13]:命令模式
老鸟:好,那我们从生活中的例子开始吧。想象一下,你在一家餐馆点餐。你给服务员下单,服务员把你的订单传递给厨房,厨师根据订单准备食物。这里,菜单上的每一道菜就像一个“命令”,服务员是“调用者”,厨师是“接收者”。命令模式就是把这种模式应用到代码中。菜鸟:哦!这样说好像有点明白了。老鸟:简单来说,命令模式将请求封装成对象,从而让你可以用不同的请求、队列或者日志来参数化其他对象。这样可以更清晰地管理请求。老鸟:总结一下,命令模式将请求封装成对象,从而使你可以用不同的请求来参数化其他对象。原创 2024-09-07 23:37:15 · 1467 阅读 · 0 评论 -
漫谈设计模式 [12]:模板方法模式
老鸟:想象一下做咖啡和茶的过程。两者有相似的步骤,比如烧水、倒入杯子,但也有不同的部分,比如泡茶叶和冲咖啡。我们可以定义一个模板方法来统一这些相似的步骤,然后将不同的部分留给具体实现。菜鸟:哦,明白了。那具体怎么实现呢?老鸟:我们可以从一个简单的例子开始。先写一个基础的类来表示饮料制作的流程。passpass菜鸟:这里用了方法来定义流程,但具体的brew和没有实现,是这样吗?老鸟:对的,因为不同的饮料会有不同的酿造和添加调料步骤。现在我们来创建具体的子类,比如茶和咖啡。菜鸟。原创 2024-09-07 23:33:20 · 770 阅读 · 0 评论 -
漫谈设计模式 [11]:代理模式
老鸟:想象一下,你有一个朋友非常忙,你需要通过他的秘书与他联系。这个秘书就是你的代理,他可以帮你处理一些简单的事情,比如预约时间、传递信息等。这样,你的朋友就可以专注于他的重要工作。这就是代理模式的基本思想:通过代理对象来控制对实际对象的访问。菜鸟:哦,我明白了。代理对象就像是中间人,帮我们处理一些额外的事务。老鸟:没错。代理模式的核心思想就是在不改变原有对象的情况下,通过代理对象来添加额外的功能。老鸟:今天我们讨论了代理模式的核心思想、实现方法、优势以及适用场景。希望你能在实际项目中灵活应用。原创 2024-09-07 23:32:00 · 1447 阅读 · 0 评论 -
漫谈设计模式 [10]:享元模式
老鸟:假设你在游戏中有很多相同的树对象,每个树对象都保存了相同的属性,比如类型、颜色等。你会怎么实现呢?菜鸟:可能会创建一个Tree类,然后每次需要时实例化一个新的对象。# 创建很多树对象老鸟:这就是问题所在。你创建了很多相同的树对象,占用了大量内存。其实这些对象的某些属性是可以共享的。老鸟:总结一下,享元模式通过共享相似对象的内部状态,减少内存占用。适用于需要大量相似对象的场景。你可以参考《设计模式》这本书,里面有详细的介绍。菜鸟我会继续学习其他设计模式的!老鸟。原创 2024-09-07 23:31:10 · 781 阅读 · 0 评论 -
漫谈设计模式 [9]:外观模式
菜鸟:外观模式?能不能解释一下是什么?老鸟:好,我们先从一个生活中的例子说起。你买了一台新电视,电视上有很多接口,比如HDMI、USB、网线等等。如果每次你都要自己插各种线并调整设置,会很麻烦对吧?菜鸟:是的,确实很麻烦。老鸟:于是,你买了一个万能遥控器,这个遥控器可以帮助你一键连接所有设备并调整设置。你只需要按一个按钮,就可以享受电视和其他设备的无缝连接。菜鸟:听起来不错,这和编程有什么关系呢?老鸟:在编程中,外观模式就像这个万能遥控器。它提供一个简单的接口,隐藏了复杂的子系统调用。原创 2024-09-07 23:29:01 · 1017 阅读 · 0 评论 -
漫谈设计模式 [8]:装饰器模式
老鸟:想象一下,你有一个简单的汉堡,只有面包和肉。现在你想加一些配料,比如生菜、番茄和奶酪。你可以一个个地加上去,这样就能得到一个更丰富的汉堡。装饰器模式就像是给汉堡加配料,逐步增强它的功能。菜鸟:哦,这样说我就明白一点了。那代码里该怎么实现呢?老鸟:我们先写一个最基本的函数,然后再逐步加上装饰器。老鸟:总结一下,装饰器模式是一种结构型设计模式,可以动态地为对象添加功能,而不改变其结构。它的优势在于灵活性和可维护性,适用于日志记录、权限校验等场景。菜鸟有没有推荐的书或资料可以进一步学习?老鸟。原创 2024-09-07 23:27:54 · 940 阅读 · 0 评论 -
漫谈设计模式 [7]:桥接模式
老鸟:当然。你可以把桥接模式看作是将抽象部分与其实现部分分离,使它们可以独立地变化。简单来说,就是让形状和颜色这两个概念独立开来,这样你就不会因为增加一种形状或颜色而修改大量代码。菜鸟:有点抽象,能不能举个例子?老鸟:好比你有一张桌子和几种颜色的油漆。你可以给桌子刷不同的颜色,但你不会因为要增加一种新颜色而去重新制作桌子,对吧?菜鸟:嗯,有点明白了。老鸟:今天我们讨论了桥接模式,通过将形状和颜色独立开来,使得它们可以独立变化,减少了系统的耦合性,增加了灵活性。原创 2024-09-07 23:26:48 · 1193 阅读 · 0 评论 -
漫谈设计模式 [6]:适配器模式
老鸟:适配器模式的核心思想是将一个接口转换成客户端希望的另一个接口。举个生活中的例子,你知道电源适配器吧?菜鸟:嗯,知道。不同国家的电源插头形状不一样,但通过电源适配器,我们可以使用同一个设备。老鸟:对,这就是适配器模式的本质。让我们把这个概念应用到编程中,你会发现它非常有用。老鸟:今天我们讨论了适配器模式,它的核心思想是将一个接口转换成客户端希望的另一个接口。我们通过一个简单的 Python 示例展示了如何实现适配器模式,并讨论了它的优势和适用场景。菜鸟接下来我应该学习什么呢?老鸟。原创 2024-09-07 23:25:30 · 1277 阅读 · 0 评论 -
漫谈设计模式 [5]:建造者模式
老鸟:你可以把建造者模式想象成一个精心制作汉堡的过程。想象一下,你在一家汉堡店,你可以选择面包、肉饼、蔬菜、酱料等等。你可以按自己的喜好一步步定制一个汉堡。建造者模式就是把对象的创建过程分成多个步骤,逐步构建复杂对象。菜鸟:哦,原来是这样!那建造者模式的核心思想是什么?老鸟:核心思想就是将一个复杂对象的构建过程分离出来,使得构建过程可以一步步进行,并且不同的构建步骤可以有不同的实现方式。老鸟:今天我们讨论了建造者模式,从基础实现到逐步扩展,讲解了其优势和适用场景。原创 2024-09-07 23:24:17 · 1428 阅读 · 0 评论 -
漫谈设计模式 [4]:原型模式
老鸟:好,我们先从一个简单的例子开始。你有没有买过外卖?菜鸟:当然有啊。老鸟:那你有没有注意到,每次你点的餐都差不多,但还是需要重复选择和确认?菜鸟:是的,每次都要点很多相似的选项,有点烦。老鸟:原型模式就像是保存了一份你常点餐的菜单模板,每次点餐的时候,只需要复制这个模板,再根据需要进行微调。这样就省去了重复选择的麻烦。菜鸟:哦,明白了,那在编程中怎么实现呢?老鸟:今天我们学习了原型模式,它通过复制现有对象来创建新的对象,避免了重复代码,简化了对象的创建过程。原创 2024-09-07 23:22:16 · 957 阅读 · 0 评论 -
漫谈设计模式 [3]:单例模式
菜鸟:听起来不错,但具体怎么实现呢?老鸟:我们可以用生活中的例子来理解单例模式。想象一下,你家里有一个电灯开关,每次你要开灯或关灯你都会去同一个地方操作,这个开关就相当于单例。你不会为每个灯泡都创建一个新的开关。菜鸟:那这样说来,单例模式就是为了确保某些资源只会有一个实例存在,对吧?老鸟:没错!接下来我们用Python代码来实现一下。老鸟:今天我们通过对话了解了单例模式的概念、实现方法、优势和适用场景。你觉得有帮助吗?菜鸟我对设计模式越来越感兴趣了。接下来有什么推荐的吗?老鸟。原创 2024-09-07 23:20:53 · 1193 阅读 · 0 评论 -
漫谈设计模式 [2]:工厂方法模式
老鸟:简单来说,工厂方法模式是一种创建对象的设计模式。它将对象的创建过程封装在一个工厂类中,而不是在代码中直接使用构造函数。举个生活中的例子,想象你去了一家餐馆点餐。你不会亲自去厨房做饭,而是告诉服务员你要什么,然后服务员帮你把饭菜准备好。这就类似于工厂方法模式。菜鸟:哦,有点明白了。也就是说,工厂方法模式可以帮我们把对象的创建过程封装起来,对吧?老鸟:没错!它的核心思想就是将对象的创建延迟到子类中,让子类决定要创建的对象类型。老鸟:今天我们讨论了工厂方法模式,包括它的定义、优势、适用场景以及常见误区。原创 2024-09-07 23:20:03 · 1096 阅读 · 0 评论 -
漫谈设计模式 [1]:简单工厂模式
好的,简单工厂模式其实就像一个工厂,根据不同的需求生产不同的产品。想象一下,你去一家咖啡店点咖啡,店员会根据你点的咖啡类型(比如拿铁、卡布奇诺等),做出相应的咖啡。这就是简单工厂模式的一个类比。今天我们讨论了简单工厂模式的定义、实现方式及其优势。简单工厂模式可以提高代码的可维护性和扩展性,但也需要注意避免滥用。如果你对设计模式感兴趣,我推荐你阅读《设计模式:可复用面向对象软件的基础》这本书,里面介绍了更多的设计模式和应用场景。原创 2024-09-07 23:18:41 · 749 阅读 · 0 评论