设计模式
文章平均质量分 67
设计模式
yeye19891224
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
如何利用职责链与代理模式实现MyBatis Plugin
Interceptor 类中 intecept() 和 plugin() 函数,以及 InterceptorChain 类中的 pluginAll() 函数,是最核心的三个函数。又是如何被触发执行的呢?假设我们需要统计应用中每个 SQL 的执行耗时,如果使用 MyBatis Plugin 来实现的话,我们只需要定义一个 SqlCostTimeInterceptor 类,让它实现 MyBatis 的 Interceptor 接口,并且,在 MyBatis 的全局配置文件中,简单声明一下这个插件就可以了。原创 2024-12-31 17:01:16 · 1159 阅读 · 0 评论 -
设计模式-备忘录模式
在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态。原创 2024-12-25 17:25:23 · 450 阅读 · 0 评论 -
设计模式-访问者模式
通过将操作逻辑从数据结构中分离出来,使得你可以在不改变数据结构的前提下,增加新的操作。访问者模式主要适用于对象结构相对稳定,但操作可能经常变化的系统。原创 2024-12-25 17:14:27 · 231 阅读 · 0 评论 -
设计模式-迭代器模式
当通过调用集合上的iterator() 函数来创建迭代器的时候,我们把modCount 值传递给迭代器的 expectedModCount 成员变量,之后每次调用迭代器上的hasNext()、next()、currentItem() 函数,我们都会检查集合上的 modCount 是否等于expectedModCount,也就是看,在创建完迭代器之后,modCount 是否改变过。迭代器模式定义了一种迭代访问一个聚合对象中各个元素的接口,允许在不暴露其内部表示的情况下,顺序访问聚合对象中的各个元素。原创 2024-12-25 17:05:24 · 318 阅读 · 0 评论 -
设计模式-状态模式
状态机有3 个组成部分:状态(State)、事件(Event)、动作(Action)。其中,事件也称为转移条件(Transition Condition)。事件触发状态的转移及动作的执行。不过,动作不是必须的,也可能只转移状态,不执行任何动作。状态模式一般用来实现状态机,而状态机常用在游戏、工作流引擎等系统开发中。原创 2024-12-25 16:21:07 · 276 阅读 · 0 评论 -
设计模式-职责链模式
Servlet Filter 是 Java Servlet 规范中定义的组件,翻译成中文就是过滤器,它可以实现对HTTP 请求的过滤功能,比如鉴权、限流、记录日志、验证参数等等。因为它是 Servlet 规范的一部分,所以,只要是支持 Servlet 的 Web 容器(比如,Tomcat、Jetty 等),都支持过滤器功能。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再传递给 C 处理器,以此类推,形成一个链条。原创 2024-12-25 16:11:48 · 435 阅读 · 0 评论 -
设计模式-策略模式
一般来讲,如果策略类是无状态的,不包含成员变量,只是纯粹的算法实现,这样的策略对象是可以被共享使用的,不需要在每次调用 getStrategy() 的时候,都创建一个新的策略对象。针对这种情况,我们可以使用上面这种工厂类的实现方式,事先创建好每个策略对象,缓存到工厂类中,用的时候直接返回。相反,如果策略类是有状态的,根据业务场景的需要,我们希望每次从工厂方法中,获得的都是新创建的策略对象,而不是缓存好可共享的策略对象,那我们就需要按照如下方式来实现策略工厂类。原创 2024-12-25 14:19:51 · 174 阅读 · 0 评论 -
设计模式-模板模式
继承的局限:模板方法模式依赖于继承,这可能限制了其在某些语言或设计中的使用,尤其是那些支持组合优于继承的语言。难以适应多种变化:如果算法的多个步骤都需要变化,模板方法模式可能需要多个钩子方法,这会使得模板方法过于复杂。增加系统复杂性:对于简单的算法,使用模板方法模式可能会增加系统的复杂性,因为需要额外定义抽象类和子类。行为的扩展性:子类可以通过覆盖钩子方法来扩展或修改算法的行为,而不需要改变算法的结构。像 Java 这种只支持单继承的语言,基于模板模式编写的子类,已经继承了一个父类,不。原创 2024-12-25 14:11:25 · 508 阅读 · 0 评论 -
设计模式-观察者模式
实现思路大致一样,都需要定义 Observer,并且通过 register() 函数注册 Observer,也都需要通过调用某个函数(比如,EventBus 中的 post() 函数)来给 Observer 发送消息(在 EventBus 中消息被称作事件 event)。跟经典的观察者模式的不同之处在于,当我们调用 post() 函数发送消息的时候,并非把消息发送给所有的观察者,而是发送给可匹配的观察者。所谓可匹配指的是,能接收的消息类型是发送消息(post 函数定义中的 event)类型的父类。原创 2024-12-25 13:53:34 · 805 阅读 · 0 评论 -
设计模式-享元模式
但它同时也提高了系统复杂性, 需要分离出外部状态和内部状态, 而且外部状态具有固化特性, 不应该随内部状态改变而改变, 否则导致系统的逻辑混乱。享元模式(Flyweight Design Pattern)。使用共享对象可有效地支持大量的细粒度的对象。减少应用程序创建的对象, 降低程序内存的占用, 增强程序的性能。说人话:复用对象,节省内存。原创 2024-12-25 11:48:31 · 198 阅读 · 0 评论 -
设计模式-门面模式
门面模式,也叫外观模式,英文全称是 Facade Design Pattern。门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。原创 2024-12-25 11:21:10 · 291 阅读 · 0 评论 -
设计模式-适配器模式
顾名思义,这个模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。:代理模式在不改变原始类接口的条件下,为原始类定义一个代理类,主要目的是控制访问,而非加强功能,这是它跟装饰器模式最大的不同。适配器提供跟原始类不同的接口,而代理模式、装饰器模式提供的都是跟原始类相同的接口。其中,类适配器使用继承关系来实现,对象适配器使用组合关系来实现。:装饰者模式在不改变原始类接口的情况下,对原始类功能进行增强,并且支持多个装饰器的嵌套使用。原创 2024-12-25 11:17:12 · 289 阅读 · 0 评论 -
设计模式-装饰器模式
这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装装饰器模式通过将对象包装在装饰器类中,以便动态地修改其行为。避免继承的功能扩展:当使用继承来增强对象功能时会导致类的层次结构过于复杂时,考虑采用装饰器模式。弹性组合多项功能:若需为对象添加多项功能,且这些功能可弹性组合,则可采用装饰器模式。维护对象的封装性:若需为对象添加功能,同时又不愿修改原始对象的代码或破坏其封装性,可采用装饰器模式。代理模式中,代理类附加的是跟原始类无关的功能,而在装饰器模式中,装饰器类附加的是跟原始类相关的增强功能。原创 2024-12-25 11:11:26 · 569 阅读 · 0 评论 -
设计模式-桥接模式
代码示例以手机和产地为例,手机分为国产品牌和美国品牌,国产手机可分为华为,vivo等,美国有苹果手机,谷歌手机等,对国产手机的添加只需添加一个具体实现类即可,如果想要添加一个韩国的手机则需要对抽象类进行继承实现。原创 2024-12-25 10:30:23 · 326 阅读 · 0 评论 -
设计模式-代理模式
代理模式(Proxy Design Pattern)它在不改变原始类(或叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能。原创 2024-12-25 09:29:17 · 330 阅读 · 0 评论 -
设计模式-原型模式
原型模式是一种对象创建型模式,用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。原型模式允许一个对象再创建另一个可以定制的对象,无须知道任何创建细节。原型模式的基本工作原理是通过将一个原型对象传递给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象复制原型来实现创建过程。1)当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过一个已有实例可以提高新实例的创建效率。2)可以动态增加或减少产品类。原创 2024-12-24 16:59:19 · 420 阅读 · 0 评论 -
设计模式-建造者模式
产品(Product): 这是最终要创建的复杂对象。建造者(Builder): 这个接口定义了创建和装配产品的各个部件所需的方法。具体建造者(ConcreteBuilder): 实现了建造者接口。它知道如何实际构建和装配产品的部件。指挥者(Director): 它负责安排已有模块的顺序,然后告诉建造者开始建造。原创 2024-12-24 16:53:20 · 284 阅读 · 0 评论 -
设计模式-工厂模式
工厂模式的核心思想是将对象的创建过程封装在一个单独的类中,这个类被称为工厂类。通过使用工厂模式,客户端代码无需关心对象的创建细节,只需通过工厂类获取所需的对象。这种方式不仅提高了代码的可维护性,还增强了系统的灵活性和可扩展性。工厂模式是Java设计模式中非常重要的一种创建型模式,它通过将对象的创建过程封装起来,提高了代码的可维护性和可扩展性。根据不同的应用场景,可以选择简单工厂模式、工厂方法模式或抽象工厂模式。在实际开发中,合理使用工厂模式可以有效降低代码的耦合度,提高系统的灵活性。原创 2024-12-24 16:37:36 · 336 阅读 · 0 评论 -
设计模式-单例模式
如果初始化耗时长,那我们最好不要等到真正要用它的时候,才去执行这个耗时长的初始化过程,这会影响到系统的性能(比如,在响应客户端接口请求的时候,做这个初始化操作,会导致此请求的响应时间变长,甚至超时)。采用饿汉式实现方式,将耗时的初始化操作,提前到程序启动的时候完成,这样就能避免在程序运行的时候,再去初始化导致的性能问题。在类加载的时候,instance 静态实例就已经创建并初始化好了,所以,instance 实例的创建过程是线程安全的。从内部看是一个饿汉式的单例,但是从外部看来,又的确是懒汉式的实现。原创 2024-12-24 16:13:24 · 735 阅读 · 0 评论 -
设计原则与思想:设计原则
SOLID 原则是面向对象设计中的五个基本原则单一职责原则(Single Responsibility Principle)开闭原则(Open Closed Principle)里式替换原则(Liskov Substitution Principle)接口隔离原则(Interface Segregation Principle)依赖倒置原则(Dependency Inversion Principle - DIP)原创 2024-12-24 15:32:46 · 1037 阅读 · 0 评论 -
设计原则与思想:面向对象
抽象这个概念是一个非常通用的设计思想封装主要讲的是如何隐藏信息、保护数据,而抽象讲的是如何隐藏方法的具体实现,让调用者只需要关心方法提供了哪些功能,并不需要知道这些功能是如何实现的即便不编写接口类,单纯的类本身就满足抽象特性。之所以这么说,那是因为,类的方法是通过编程语言中的“函数”这一语法机制来实现的。通过函数包裹具体的实现逻辑,这本身就是一种抽象。调用者在使用函数的时候,并不需要去研究函数内部的实现逻辑,只需要通过函数的命名、注释或者文档,了解其提供了什么功能,就可以直接使用了。原创 2024-12-24 15:20:14 · 903 阅读 · 0 评论 -
设计模式简述
常用的有:观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式。不常用的有:访问者模式、备忘录模式、命令模式、解释器模式、中介模式。常用的有:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式。常用的有:代理模式、桥接模式、装饰者模式、适配器模式。不常用的有:门面模式、组合模式、享元模式。SOLID 原则 -SRP 单一职责原则。SOLID 原则 -LSP 里式替换原则。SOLID 原则 -ISP 接口隔离原则。SOLID 原则 -DIP 依赖倒置原则。SOLID 原则 -OCP 开闭原则。原创 2024-12-24 15:03:09 · 196 阅读 · 0 评论
分享