![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 94
吃我一矛
这个作者很懒,什么都没留下…
展开
-
设计模式-33-常用的设计思想、原则和模式
主要包括面向对象、设计原则、编码规范、重构技巧、设计模式这五个部分。原创 2024-04-14 23:07:03 · 615 阅读 · 0 评论 -
设计模式-32-六大原则
主要包括面向对象、设计原则、编码规范、重构技巧、设计模式这五个部分。原创 2024-04-14 23:02:56 · 226 阅读 · 0 评论 -
设计模式-31-总结回顾23种经典设计模式的原理、背后的思想、应用场景等
23种经典设计模式共分为3种类型,分别是创建型、结构型和行为型。现在,我们把这3种类型分成3个对应的小模块,逐一带你回顾一下每一种设计模式的原理、实现、设计意图和应用场景。话不多说,让我们正式开始今天的复习吧!原创 2024-04-14 18:18:39 · 888 阅读 · 0 评论 -
设计模式-30-中介模式-行为型模式
现在,我们来学习23种经典设计模式中的最后一个,中介模式。跟前面刚刚讲过的命令模式、解释器模式类似,中介模式也属于不怎么常用的模式,应用场景比较特殊、有限,但是,跟它俩不同的是,中介模式理解起来并不难,代码实现也非常简单,学习难度要小很多。如果你对中介模式有所了解,你可能会知道,中介模式跟之前讲过的观察者模式有点相似,所以,今天我们还会详细讨论下这两种模式的区别。原创 2024-04-14 18:15:08 · 703 阅读 · 0 评论 -
设计模式-29-解释器模式-行为型模式
上一节,我们学习了命令模式。命令模式将请求封装成对象,方便作为函数参数传递和赋值给变量。它主要的应用场景是给命令的执行附加功能,换句话说,就是控制命令的执行,比如,排队、异步、延迟执行命令、给命令执行记录日志、撤销重做命令等等。总体上来讲,命令模式的应用范围并不广。现在,我们来学习解释器模式,它用来描述如何构建一个简单的“语言”解释器。比起命令模式,解释器模式更加小众,只在一些特定的领域会被用到,比如编译器、规则引擎、正则表达式。所以,解释器模式也不是我们学习的重点,你稍微了解一下就可以了。原创 2024-04-14 17:54:39 · 515 阅读 · 0 评论 -
设计模式-28-命令模式-行为型模式
如何利用命令模式实现一个手游后端架构原创 2024-04-14 17:23:05 · 718 阅读 · 0 评论 -
设计模式-27-备忘录模式-行为型模式
上两节,我们学习了访问者模式。在23种设计模式中,访问者模式的原理和实现可以说是最难理解的了,特别是它的代码实现。其中,用Single Dispatch来模拟Double Dispatch的实现思路尤其不好理解。不知道你有没有将它拿下呢?如果还没有弄得很清楚,那就要多看几遍、多自己动脑经琢磨一下。现在,我们学习另外一种行为型模式,备忘录模式。这个模式理解、掌握起来不难,代码实现比较灵活,应用场景也比较明确和有限,主要是用来防丢失、撤销、恢复等。所以,相对于上两节课,今天的内容学起来相对会比较轻松些。原创 2024-04-14 16:44:11 · 821 阅读 · 0 评论 -
设计模式-26-访问者模式(下)-行为型模式
上一节中,我们学习了访问者模式的原理和实现,并且还原了访问者模式诞生的思维过程。总体上来讲,这个模式的代码实现比较难,所以应用场景并不多。从应用开发的角度来说,它的确不是我们学习的重点。话不多说,让我们正式开始今天的学习吧!原创 2024-04-14 16:12:19 · 532 阅读 · 0 评论 -
设计模式-25-访问者模式(上)-行为型模式
前面我们讲到,大部分设计模式的原理和实现都很简单,不过也有例外,比如今天要讲的访问者模式。它可以算是23种经典设计模式中最难理解的几个之一。因为它难理解、难实现,应用它会导致代码的可读性、可维护性变差,所以,访问者模式在实际的软件开发中很少被用到,在没有特别必要的情况下,建议你不要使用访问者模式。尽管如此,为了让你以后读到应用了访问者模式的代码的时候,能一眼就能看出代码的设计意图,同时为了整个专栏内容的完整性,我觉得还是有必要给你讲一讲这个模式。原创 2024-04-14 16:11:03 · 795 阅读 · 0 评论 -
设计模式-24-迭代器模式(下)-行为型模式
上两节,我们学习了迭代器模式的原理、实现,并且分析了在遍历集合的同时增删集合元素,产生不可预期结果的原因以及应对策略。现在,我们再来看这样一个问题:如何实现一个支持“快照”功能的迭代器?这个问题算是对上一节课内容的延伸思考,为的是帮你加深对迭代器模式的理解,也是对你分析、解决问题的一种锻炼。你可以把它当作一个面试题或者练习题,在看我的讲解之前,先试一试自己能否顺利回答上来。原创 2024-04-14 16:03:19 · 814 阅读 · 0 评论 -
设计模式-23-迭代器模式(中)-行为型模式
上一节中,我们通过给ArrayList、LinkedList容器实现迭代器,学习了迭代器模式的原理、实现和设计意图。迭代器模式主要作用是解耦容器代码和遍历代码,这也印证了我们前面多次讲过的应用设计模式的主要目的是解耦。上一节中讲解的内容都比较基础,现在,我们来深挖一下,如果在使用迭代器遍历集合的同时增加、删除集合中的元素,会发生什么情况?应该如何应对?如何在遍历的同时安全地删除集合元素?原创 2024-04-14 16:00:28 · 994 阅读 · 0 评论 -
设计模式-22-迭代器模式(上)-行为型模式
上一节,我们学习了状态模式。状态模式是状态机的一种实现方法。它通过将事件触发的状态转移和动作执行,拆分到不同的状态类中,以此来避免状态机类中的分支判断逻辑,应对状态机类代码的复杂性。现在,我们学习另外一种行为型设计模式,迭代器模式。它用来遍历集合对象。不过,很多编程语言都将迭代器作为一个基础的类库,直接提供出来了。在平时开发中,特别是业务开发,我们直接使用即可,很少会自己去实现一个迭代器。不过,知其然知其所以然,弄懂原理能帮助我们更好的使用这些工具类,所以,我觉得还是有必要学习一下这个模式。原创 2024-04-14 15:58:25 · 718 阅读 · 0 评论 -
设计模式-21-状态模式-行为型模式
有限状态机,英文翻译是Finite State Machine,缩写为FSM,简称为状态机。状态机有3个组成部分:状态(State)、事件(Event)、动作(Action)。其中,事件也称为转移条件(Transition Condition)。事件触发状态的转移及动作的执行。不过,动作不是必须的,也可能只转移状态,不执行任何动作。对于刚刚给出的状态机的定义,我结合一个具体的例子,来进一步解释一下。“超级马里奥”游戏不知道你玩过没有?原创 2024-04-13 22:37:27 · 530 阅读 · 0 评论 -
设计模式-20-职责链模式(下)-行为型模式
上一节,我们学习职责链模式的原理与实现,并且通过一个敏感词过滤框架的例子,展示了职责链模式的设计意图。本质上来说,它跟大部分设计模式一样,都是为了解耦代码,应对代码的复杂性,让代码满足开闭原则,提高代码的可扩展性。除此之外,我们还提到,职责链模式常用在框架的开发中,为框架提供扩展点,让框架的使用者在不修改框架源码的情况下,基于扩展点添加新的功能。实际上,更具体点来说,职责链模式最常用来开发框架的过滤器和拦截器。原创 2024-04-13 21:53:13 · 860 阅读 · 0 评论 -
设计模式-19-职责链模式(上)-行为型模式
前几节中,我们学习了模板模式、策略模式,今天,我们来学习职责链模式。这三种模式具有相同的作用:复用和扩展,在实际的项目开发中比较常用,特别是框架开发中,我们可以利用它们来提供框架的扩展点,能够让框架的使用者在不修改框架源码的情况下,基于扩展点定制化框架的功能。今天,我们主要讲解职责链模式的原理和实现。除此之外,我还会利用职责链模式,带你实现一个可以灵活扩展算法的敏感词过滤框架。原创 2024-04-13 20:49:19 · 935 阅读 · 0 评论 -
设计模式-18-策略模式(下)-行为型模式
上一节,我们主要介绍了策略模式的原理和实现,以及如何利用策略模式来移除if-else或者switch-case分支判断逻辑。今天,我们结合“给文件排序”这样一个具体的例子,来详细讲一讲策略模式的设计意图和应用场景。除此之外,在今天的讲解中,我还会通过一步一步地分析、重构,给你展示一个设计模式是如何“创造”出来的。通过今天的学习,你会发现,。原创 2024-04-13 19:53:28 · 1022 阅读 · 0 评论 -
设计模式-17-策略模式(上)-行为型模式
策略类的定义比较简单,包含一个策略接口和一组实现这个接口的策略类。因为所有的策略类都实现相同的接口,所以,客户端代码基于接口而非实现编程,可以灵活地替换不同的策略。@Override//具体的算法...@Override//具体的算法...原创 2024-04-13 17:11:16 · 846 阅读 · 0 评论 -
设计模式-16-模板模式(下)-回调-行为型模式
上一节中,我们学习了模板模式的原理、实现和应用。它常用在框架开发中,通过提供功能扩展点,让框架用户在不修改框架源码的情况下,基于扩展点定制化框架的功能。除此之外,模板模式还可以起到代码复用的作用。复用和扩展是模板模式的两大作用,实际上,还有另外一个技术概念,也能起到跟模板模式相同的作用,那就是(Callback)。今天我们今天就来看一下,回调的原理、实现和应用,以及它跟模板模式的区别和联系。原创 2024-04-13 16:35:43 · 1021 阅读 · 0 评论 -
设计模式-15-模板模式(上)-行为型模式
在Java AbstractList类中,addAll()函数可以看作模板方法,add()是子类需要重写的方法,尽管没有声明为abstract的,但函数实现直接抛出了UnsupportedOperationException异常。前提是,如果子类不重写是不能使用的。原创 2024-04-13 16:33:47 · 954 阅读 · 0 评论 -
设计模式-14-观察者模式(下)-行为型模式
EventBus翻译为“事件总线”,它提供了实现观察者模式的骨架代码。我们可以基于此框架,非常容易地在自己的业务场景中实现观察者模式,不需要从零开始开发。其中,Google Guava EventBus就是一个比较著名的EventBus框架,它不仅仅支持异步非阻塞模式,同时也支持同步阻塞模式现在,我们就通过例子来看一下,Guava EventBus具有哪些功能。// 依赖注入// 同步阻塞模式// 异步非阻塞模式//省略输入参数的校验代码。原创 2024-04-13 16:30:13 · 592 阅读 · 0 评论 -
设计模式-13-观察者模式(上)-行为型模式
我们常把23种经典的设计模式分为三类:创建型、结构型、行为型。前面我们已经学习了创建型和结构型,从今天起,我们开始学习行为型设计模式。我们知道,创建型设计模式主要解决“对象的创建”问题,结构型设计模式主要解决“类或对象的组合或组装”问题,那行为型设计模式主要解决的就是“类或对象之间的交互”问题。行为型设计模式比较多,有11个,几乎占了23种经典设计模式的一半。它们分别是:观察者模式、模板模式、策略模式、职责链模式、状态模式、迭代器模式、访问者模式、备忘录模式、命令模式、解释器模式、中介模式。原创 2024-04-13 16:25:28 · 534 阅读 · 0 评论 -
设计模式-12-享元模式(下)-结构型模式
我们通过棋牌游戏和文本编辑器这样两个实际的例子,学习了享元模式的原理、实现以及应用场景。用一句话总结一下,享元模式中的“享元”指被共享的单元。享元模式通过复用对象,以达到节省内存的目的。现在,再剖析一下,享元模式在Java Integer、String中的应用。如果你不熟悉Java编程语言,那也不用担心看不懂,因为今天的内容主要还是介绍设计思路,跟语言本身关系不大。原创 2024-04-13 16:09:01 · 526 阅读 · 0 评论 -
设计模式-11-享元模式(上)-结构型模式
对象池、连接池(比如数据库连接池)、线程池等也是为了复用,那它们跟享元模式有什么区别呢?你可能对连接池、线程池比较熟悉,对对象池比较陌生,所以,这里我简单解释一下对象池。像C++这样的编程语言,内存的管理是由程序员负责的。为了避免频繁地进行对象创建和释放导致内存碎片,我们可以预先申请一片连续的内存空间,也就是这里说的对象池。每次创建对象时,我们从对象池中直接取出一个空闲对象来使用,对象使用完成之后,再放回到对象池中以供后续复用,而非直接释放掉。原创 2024-04-13 15:37:52 · 587 阅读 · 0 评论 -
设计模式-10-组合模式-结构型模式
结构型设计模式就快要讲完了,还剩下两个不那么常用的:组合模式和享元模式。今天,我们来讲一下组合模式跟我们之前讲的面向对象设计中的“组合关系(通过组合来组装两个类)”,完全是两码事。这里讲的“组合模式”,主要是用来处理树形结构数据。这里的“数据”,你可以简单理解为一组对象集合,待会我们会详细讲解。正因为其应用场景的特殊性,数据必须能表示成树形结构,这也导致了这种模式在实际的项目开发中并不那么常用。但是,一旦数据满足树形结构,应用这种模式就能发挥很大的作用,能让代码变得非常简洁。原创 2024-04-13 11:32:41 · 948 阅读 · 0 评论 -
设计模式-09-门面模式-结构型模式
前面我们已经学习了代理模式、桥接模式、装饰器模式、适配器模式,这4种结构型设计模式。今天,我们再来学习一种新的结构型模式:门面模式。门面模式原理和实现都特别简单,应用场景也比较明确,主要在接口设计方面使用。如果你平时的工作涉及接口开发,不知道你有没有遇到关于接口粒度的问题呢?为了保证接口的可复用性(或者叫通用性),我们需要将接口尽量设计得细粒度一点,职责单一一点。但是,如果接口的粒度过小,在接口的使用者开发一个业务功能时,就会导致需要调用n多细粒度的接口才能完成。调用者肯定会抱怨接口不好用。原创 2024-04-11 22:23:23 · 1024 阅读 · 0 评论 -
设计模式-08-适配器模式-结构型模式
原理和实现讲完了,都不复杂。我们再来看,到底什么时候会用到适配器模式呢?一般来说,适配器模式可以看作一种“补偿模式”,用来补救设计上的缺陷。应用这种模式算是“无奈之举”。如果在设计初期,我们就能协调规避接口不兼容的问题,那这种模式就没有应用的机会了。前面我们反复提到,适配器模式的应用场景是“接口不兼容”。那在实际的开发中,什么情况下才会出现接口不兼容呢?我建议你先自己思考一下这个问题,然后再来看我下面的总结。原创 2024-04-11 22:20:20 · 711 阅读 · 0 评论 -
设计模式-07-装饰器模式-结构型模式
我们学习了桥接模式,桥接模式有两种理解方式。第一种理解方式是“将抽象和实现解耦,让它们能独立开发”。这种理解方式比较特别,应用场景也不多。另一种理解方式更加简单,类似“组合优于继承”设计原则,这种理解方式更加通用,应用场景比较多。不管是哪种理解方式,它们的代码结构都是相同的,都是一种类之间的组合关系。今天,我们通过剖析Java IO类的设计思想,再学习一种新的结构型模式,装饰器模式。它的代码结构跟桥接模式非常相似,不过,要解决的问题却大不相同。原创 2024-04-11 22:17:33 · 936 阅读 · 0 评论 -
设计模式-06-桥接模式-结构型模式
我们学习了第一种结构型模式:代理模式。它在不改变原始类(或者叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能。代理模式在平时的开发经常被用到,常用在业务系统中开发一些非功能性需求,比如:监控、统计、鉴权、限流、事务、幂等、日志。今天,我们再学习另外一种结构型模式:桥接模式。桥接模式的代码实现非常简单,但是理解起来稍微有点难度,并且应用场景也比较局限,所以,相当于代理模式来说,桥接模式在实际的项目中并没有那么常用,你只需要简单了解,见到能认识就可以,并不是我们学习的重点。原创 2024-04-11 22:13:25 · 584 阅读 · 0 评论 -
设计模式-05-代理模式-结构型模式
我们学习了设计模式中的创建型模式。创建型模式主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。其中,单例模式用来创建全局唯一的对象。工厂模式用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定创建哪种类型的对象。建造者模式是用来创建复杂对象,可以通过设置不同的可选参数,“定制化”地创建不同的对象。原型模式针对创建成本比较大的对象,利用对已有对象进行复制的方式进行创建,以达到节省创建时间的目的。我们现在学习另外一种类型的设计模式:结构型模式。原创 2024-04-11 22:07:25 · 682 阅读 · 0 评论 -
设计模式-04-原型模式-创建型模式
如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式,来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式,简称原型模式。原创 2024-04-11 22:02:47 · 834 阅读 · 0 评论 -
设计模式-03-建造者模式-创建型模式
中文翻译为或者,也有人叫它。实际上,建造者模式的原理和代码实现非常简单,掌握起来并不难,难点在于应用场景。比如,你有没有考虑过这样几个问题:直接使用构造函数或者配合set方法就能创建对象,为什么还需要建造者模式来创建呢?建造者模式和工厂模式都可以创建对象,那它们两个的区别在哪里呢?原创 2024-04-10 23:59:00 · 258 阅读 · 0 评论 -
设计模式-01-单例模式-创建型模式
单例设计模式(Singleton Design Pattern)理解起来非常简单。一个类只允许创建一个对象(或者叫实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。原创 2024-04-09 21:28:54 · 829 阅读 · 0 评论 -
设计模式-02-工厂模式-创建型模式
设计模式-工厂模式总结原创 2024-04-09 01:35:48 · 770 阅读 · 0 评论