自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Mediator 中介者模式

what(是什么): 一个单独的(中介)对象,来封装一组对象之间的交互。将这组对象之间的交互委派给与中介对象交互,来避免对象之间的直接交互。个人理解: 解耦的普遍方式加多一层,对象之间交互过于耦合,那就加多一层对象解耦。其实像微服务的ACL防腐层,负责和外界微服务交互。when(什么时候用): 多对象复杂交互。

2024-11-27 09:00:00 171

原创 Interpreter 解释器模式

what(是什么): 解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。how(如何用): 将语法规则拆分一些小的独立的单元,然后对每个单元进行解析,最终合并为对整个语法规则的解析。个人理解: 将语法解析的工作拆分到各个小类中,以此来避免大而全的解析类。

2024-11-26 09:00:00 212

原创 command 命令模式

what(是什么):命令模式将请求(命令)封装为一个对象,这样可以使用不同的请求参数化其他对象(将不同请求依赖注入到其他对象),并且能够支持请求(命令)的排队执行、记录日志、撤销等(附加控制)功能。个人理解: 当什么多起来复杂起来的时候就将其封装独立起来,命令复杂且多就将其封装起来。when(什么时候用): 游戏场景,处理指令。

2024-11-25 09:00:00 134

原创 visitor 访问者模式

when(什么时候用): 当你有个类,里面的包含各种类型的元素,这个类结构比较稳定,不会经常增删不同类型的元素。而需要经常给这些元素添加新的操作的时候,考虑使用此设计模式。个人理解: 重点在于accept function 里面传入了自身以实现重载,容易给对象增加新的操作。what(是什么): 允许一个或者多个操作应用到一组对象上,解耦操作和对象本身。how(如何用): 利用多态和重载实现。

2024-11-24 09:00:00 196

原创 iterator 迭代器模式

how(如何用):一个完整的迭代器模式,一般会涉及容器和容器迭代器两部分内容。为了达到基于接口而非实现编程的目的,容器又包含容器接口、容器实现类,迭代器又包含迭代器接口、迭代器实现类。容器中需要定义 iterator() 方法,用来创建迭代器。迭代器接口中需要定义 hasNext()、currentItem()、next() 三个最基本的方法。容器对象通过依赖注入传递到迭代器类中。个人理解: 用于遍历容器,复杂对象的遍历(树,图),需要注意的问题,在遍历时增删都有可能导致出错。

2024-11-23 09:00:00 119

原创 status 状态模式

个人理解: 状态的简单转移,当多状态非单向性状态变化时,可以使用状态模式,本质其实就是状态机的实现。why(为什么用):使得状态与业务解耦。what(是什么): 有限状态机。when(什么时候用): 状态流转。

2024-11-22 09:00:00 348

原创 snapshot 备忘录模式

what(是什么): 在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态。个人理解: 代码层面对操作的备份。

2024-11-21 14:45:04 211

原创 Chain Of Responsibility Design Pattern 责任链模式

个人理解: 其实就是链式任务,A -> B -> C, 任务一定会按ABC三个顺序执行。在生活中常出现step 1,2,3 1成功后才会走2, A部门处理完相应内容需要B部门处理后续任务等等)what(是什么): 将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。但这个的优势就是不用特定的去找谁才是负责人,就按顺序执行,谁可以执行谁执行。how(如何用): 用个数组去存储处理对象,然后循环调用对象去处理。

2024-11-21 14:38:30 159

原创 strategy 策略模式

what(是什么):定义一族算法类,将每个算法分别封装起来,让它们可以互相替换。策略模式可以使算法的变化独立于使用它们的客户端。

2024-10-30 10:44:42 320

原创 template 模版模式

what(是什么): 模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。个人理解: 实际开发常用的的一种设计模式,抽象类作为父类一些特殊的方法交给子类去实现,实现了代码的复用和扩展。when(什么时候用): 当发现多个类的整体流程相似时,不妨试试模版模式。how(如何用): 抽象类父类作为主流程,子类定制化流程中的一些方法。

2024-10-28 14:22:29 225

原创 Observable 观察者模式

what(是什么): 在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。与生产者-消费者模式的差异:观察者模式一对一,可同步异步。生产者消费者模式:多对多用异步。when(什么时候用): 邮件订阅、RSS Feeds。why(为什么用):将观察者和被观察者代码解耦。

2024-10-25 08:46:31 209

原创 Flyweight 享元模式

how(如何用): 通过工厂模式,在工厂类中,通过一个 Map 来缓存已经创建过的享元对象。个人理解:主要作用就是能够复用创建的对象以达到节省内存的方式。when(什么时候用): 享元对象是不可变对象。why(为什么用):能够复用对象,节省内存。what(是什么): 被共享的单元。享元模式 vs 单例、缓存、对象池。

2024-10-24 10:58:33 245

原创 Composite 组合模式

what(是什么): 将一组对象组织(Compose)成树形结构,以表示一种“部分 - 整体”的层次结构。组合让客户端(在很多设计模式书籍中,“客户端”代指代码的使用者。)可以统一单个对象和组合对象的处理逻辑。个人理解:对于组合设计模式其实更像数据结构和算法的抽象然后应用于业务中,处理树形结构的数据。when(什么时候用): 当数据满足树型结构时,例如文件系统中文件路径,公司系统多层级关系。why(为什么用):简化树形结构中对象的处理,无论它们是单个对象还是组合对象。

2024-10-21 10:21:26 127

原创 门面(外观)模式

个人理解: 更像多合一的思想,在独立解耦的思路中难免会增加交互的次数从而影响性能,但多合一的思路就能解决解耦后带来的问题,尽量保持接口的可复用性,但针对特殊情况,允许提供冗余的门面接口,来提供更易用的接口。what(是什么): 门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。

2024-10-18 17:37:10 349

原创 Adapter 适配器模式

when(什么时候用):适配器模式可以看作一种“补偿模式”,用来补救设计上的缺陷。应用这种模式算是“无奈之举”。如果在设计初期,我们就能协调规避接口不兼容的问题,那这种模式就没有应用的机会。how(如何用):两种实现方式:类适配器和对象适配器。类适配器使用继承关系来实现,对象适配器使用组合关系来实现。what(是什么): 能将不兼容的接口转换为可兼容的接口的设计模式。代理、桥接、装饰器、适配器 4 种设计模式的区别。

2024-10-16 16:43:36 302

原创 Decorator 装饰器模式

when(什么时候用): 当需要在不增加大量子类的情况下扩展类的功能。what(是什么): 一种用于解决继承关系过于复杂的设计模式。

2024-10-15 17:15:34 218

原创 Bridge 桥接模式

个人认为介绍桥接模式的比较好的文章:https://blog.youkuaiyun.com/weixin_39296283/article/details/104953668。when(什么时候用): 多维度类时,例如物体的形状和颜色。why(为什么用):组合解耦。

2024-10-14 16:32:43 113

原创 Proxy 代理模式

what(是什么): 在不改变原始类(或叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能。why(为什么用):解耦业务与非业务功能。

2024-10-11 15:05:39 193

原创 Prototype 原型模式

when(什么时候用):对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同)what(是什么): 利用对已有对象(原型)进行复制(或者叫拷贝)的方式。why(为什么用):不用手动一个个遍历手动set,特别是深层嵌套时。

2024-10-10 08:37:58 379

原创 Builder 建造者模式

工厂模式是用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定创建哪种类型的对象。建造者模式是用来创建一种类型的复杂对象,通过设置不同的可选参数,“定制化”地创建不同的对象。why(为什么用):当参数过多,还有参数条件过多时,会导致构造函数代码可读性变差。how(如何用):如下代码或者使用lombook @Builder即可。what(是什么): 一种简化构造对象的设计模式。when(什么时候用):当类是不可变对象时。

2024-10-09 09:50:47 251

原创 Factory 工厂模式

when(什么时候用):创建对象逻辑复杂时,例如多个if-else。how(如何用):当类复杂时用工厂方法,否则简单工厂即可。why(为什么用):解耦,能够将对象的创建和使用相分离。what(是什么): 一种创建对象模式。

2024-10-08 15:28:20 247

原创 Singleton 单例模式

when(什么时候用):常用场景:打印日志Logger,ID生成器。how(如何用):懒汉,饿汉,双重检测,静态内部类,枚举。what(是什么): 一个类只允许创建一个对象。why(为什么用):节省内存空间,避免覆盖问题。

2024-10-07 17:17:05 260

空空如也

空空如也

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

TA关注的人

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