![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 89
兜兜转转m
有事私聊留下联系方式
展开
-
迭代器模式:相比直接遍历集合数据,使用迭代器有哪些优势?
来创建对应的迭代器。为了能实现基于接口而非实现编程,我们还需要将这个方法定义在List接口中。原创 2023-07-16 15:20:21 · 1246 阅读 · 1 评论 -
状态模式:游戏、工作流引擎中常用的状态机是如何实现的?
有限状态机,英文翻译是Finite State Machine,缩写为FSM,简称为状态机。状态机有3个组成部分:状态(State)、事件(Event)、动作(Action)。其中,事件也称为转移条件(Transition Condition)。事件触发状态的转移及动作的执行。不过,动作不是必须的,也可能只转移状态,不执行任何动作。马里奥形态的转变就是一个状态机。其中,马里奥的不同形态就是状态机中的“状态”,游戏情节(比如吃了蘑菇)就是状态机中的“事件”,加减积分就是状态机中的“动作”。原创 2023-07-16 10:41:15 · 2668 阅读 · 0 评论 -
职责链模式:如何实现可灵活扩展算法的敏感信息过滤框架?
今天,我们主要的原理和实现。除此之外,我还会利用职责链模式,带你实现一个。下一节课,我们会更加贴近实战,通过剖析Servlet Filter、Spring Interceptor来看,如何利用职责链模式实现框架中常用的过滤器、拦截器。原创 2023-07-16 10:17:47 · 1740 阅读 · 0 评论 -
策略模式:如何避免冗长的if-else/switch分支判断代码?
策略类的定义比较简单,包含一个策略接口和一组实现这个接口的策略类。因为所有的策略类都实现相同的接口,所以,客户端代码基于接口而非实现编程,可以灵活地替换不同的策略。@Override//具体的算法...@Override//具体的算法...原创 2023-07-14 17:46:33 · 198 阅读 · 0 评论 -
模板模式(下):模板模式与Callback回调函数有何区别和联系?
上一节课中,我们学习了模板模式的原理、实现和应用。它常用在框架开发中,通过提供功能扩展点,让框架用户在不修改框架源码的情况下,基于扩展点定制化框架的功能。除此之外,模板模式还可以起到代码复用的作用。复用和扩展是模板模式的两大作用,实际上,还有另外一个技术概念,也能起到跟模板模式相同的作用,那就是(Callback)。今天我们今天就来看一下,回调的原理、实现和应用,以及它跟模板模式的区别和联系。原创 2023-07-14 16:34:44 · 268 阅读 · 0 评论 -
模板模式(上):剖析模板模式在JDK、Servlet、JUnit等中的应用
我们现在来看,HttpServlet的service()函数长什么样子。原创 2023-07-14 15:50:44 · 1500 阅读 · 0 评论 -
观察者模式(下):如何实现一个异步非阻塞的EventBus框架?
EventBus翻译为“事件总线”,它提供了实现观察者模式的骨架代码。我们可以基于此框架,非常容易地在自己的业务场景中实现观察者模式,不需要从零开始开发。其中,Google Guava EventBus就是一个比较著名的EventBus框架,它不仅仅支持异步非阻塞模式,同时也支持同步阻塞模式// 依赖注入// 同步阻塞模式// 异步非阻塞模式//省略输入参数的校验代码//省略userService.register()异常的try-catch代码// 依赖注入@Subscribe。原创 2023-07-12 12:30:01 · 623 阅读 · 0 评论 -
观察者模式(上):详解各种应用场景下观察者模式的不同实现方式
从今天起,我们开始学习行为型设计模式。我们知道,创建型设计模式主要解决“对象的创建”问题,结构型设计模式主要解决“类或对象的组合或组装”问题,那行为型设计模式主要解决的就是“”问题。原创 2023-07-12 09:49:58 · 605 阅读 · 0 评论 -
组合模式:如何设计实现支持递归遍历的文件系统目录树结构?
组合模式跟我们之前讲的面向对象设计中的“组合关系(通过组合来组装两个类)”,完全是两码事。这里讲的“组合模式”,主要是用来处理树形结构数据。这里的“数据”,你可以简单理解为一组对象集合,待会我们会详细讲解。正因为其应用场景的特殊性,数据必须能表示成树形结构,这也导致了这种模式在实际的项目开发中并不那么常用。将一组对象组织(Compose)成树形结构,以表示一种“部分-整体”的层次结构。组合让客户端(在很多设计模式书籍中,“客户端”代指代码的使用者。)可以统一单个对象和组合对象的处理逻辑。假设我们有这样一个需原创 2023-07-09 14:57:56 · 332 阅读 · 0 评论 -
门面模式:如何设计合理的接口粒度以兼顾接口的易用性和通用性?
今天,我们再来学习一种新的结构型模式:门面模式。门面模式原理和实现都特别简单,应用场景也比较明确,主要在接口设计方面使用。原创 2023-07-09 09:03:23 · 275 阅读 · 0 评论 -
适配器模式:代理、适配器、桥接、装饰,这四个模式有何区别?
适配器模式的应用场景是“接口不兼容”。那在实际的开发中,什么情况下才会出现接口不兼容呢?我建议你先自己思考一下这个问题,然后再来看我下面的总结。原创 2023-07-08 21:21:10 · 578 阅读 · 0 评论 -
装饰器模式:通过剖析Java IO类库源码学习装饰器模式
我们通过剖析Java IO类的设计思想,再学习一种新的结构型模式,装饰器模式。它的代码结构跟桥接模式非常相似,不过,要解决的问题却大不相同。Java IO类库非常庞大和复杂,有几十个类,负责IO数据的读取和写入。如果对Java IO类做一下分类,我们可以从下面两个维度将它划分为四类。具体如下所示:针对不同的读取和写入场景,Java IO又在这四个基础之上,扩展出了很多子类。具体如下所示:在我初学Java的时候,曾经对Java IO的一些用法产生过很大疑惑,比如下面这样一段代码。原创 2023-07-08 16:55:39 · 476 阅读 · 0 评论 -
桥接模式:如何实现支持不同类型和渠道的消息推送系统?
上一节课我们学习了第一种结构型模式:代理模式。它在不改变原始类(或者叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能。代理模式在平时的开发经常被用到,常用在业务系统中开发一些非功能性需求,比如:监控、统计、鉴权、限流、事务、幂等、日志。今天,我们再学习另外一种结构型模式:桥接模式。桥接模式的代码实现非常简单,但是理解起来稍微有点难度,并且应用场景也比较局限,所以,相当于代理模式来说,桥接模式在实际的项目中并没有那么常用,你只需要简单了解,见到能认识就可以,并不是我们学习的重点。原创 2023-07-08 16:31:52 · 411 阅读 · 0 评论 -
代理模式:代理在RPC、缓存、监控等场景中的应用
在这种情况下,我们该如何实现代理模式呢?原创 2023-07-08 15:15:56 · 811 阅读 · 0 评论 -
原型模式:如何最快速地clone一个HashMap散列表?
对象中的数据需要经过复杂的计算才能得到(比如排序、计算哈希值),或者需要从。原创 2023-07-07 11:09:34 · 796 阅读 · 0 评论 -
建造者模式:详解构造函数、set方法、建造者模式三种对象创建方式
思考:为什么需要建造者模式与工厂模式有何区别?原创 2023-07-07 10:10:52 · 487 阅读 · 0 评论 -
设计模式之美-实战一(上):业务开发常用的基于贫血模型的MVC架构违背OOP吗?
MVC三层架构中的M表示Model,V表示View,C表示Controller。它将整个项目分为三层:数据层、逻辑层和展示层。MVC三层开发架构是一个比较笼统的分层方式,落实到具体的开发层面,很多项目也并不会100%遵从MVC固定的分层方式,而是会根据具体的项目需求,做适当的调整。刚刚我们回顾了MVC三层开发架构。现在,我们再来看一下,什么是贫血模型?实际上,你可能一直都在用贫血模型做开发,只是自己不知道而已。不夸张地讲,据我了解,目前几乎所有的业务后端系统,都是基于贫血模型的。原创 2023-05-29 20:12:27 · 659 阅读 · 0 评论 -
设计模式之美-为什么基于接口而非实现编程?有必要为每个类都定义接口吗?
我愿意称之为最强设计书籍之一。看完这篇文章使我对代码编写有了新的思考。值得注意的是文章全篇写的是伪代码,并没有真正实现方法的逻辑,不过这样反而有利于逻辑的理解。 在上一节课中,我们讲了接口和抽象类,以及各种编程语言是如何支持、实现这两个语法概念的。设计模式之美-接口vs抽象类的区别 今天,我们继续讲一个跟“接口”相关的知识点:基于接口而非实现编程。这个原则非常重要。这个原则比较难理解此处的接口,作者将其定义为一种抽象。实际上,“基于接口而非实现编程”这条原则的另一个表述方式,是“原创 2023-05-29 16:00:37 · 294 阅读 · 0 评论 -
设计模式之美-接口vs抽象类的区别
不同的编程语言对接口和抽象类的定义方式可能有些差别,但差别并不会很大。Java这种编程语言,既支持抽象类,也支持接口,所以,为了让你对这两个语法概念有比较直观的认识,我们拿Java这种编程语言来举例讲解。首先,我们来看一下,在Java这种编程语言中,我们是如何定义抽象类的下面这段代码是一个比较典型的抽象类的使用场景(模板设计模式Logger是一个记录日志的抽象类,FileLogger和继承Logger,分别实现两种不同的日志记录方式:记录日志到文件中和记录日志到消息队列中。FileLogger和。原创 2023-05-29 15:24:14 · 661 阅读 · 0 评论 -
设计模式之美-导读
面向对象编程因为其具有丰富的特性(封装、抽象、继承、多态),希望你学完这部分内容之后,不仅仅是掌握一些重构技巧、套路,更重要的是建立持续重构意识,把重构当作开发的一部分,融入到日常的开发中。持续重构是保持代码质量不下降的有效手段,能有效避免代码腐化到无可救药的地步。到目前为止:学习《设计模式之美》的纲领已经介绍完了,以后我们就要根据这些纲领去针对性的学习常用的设计模式。不常用的有:访问者模式、备忘录模式、命令模式、解释器模式、中介模式。不常用的有:门面模式、组合模式、享元模式。不常用的有:原型模式。原创 2023-05-29 11:13:52 · 1055 阅读 · 0 评论