设计模式
文章平均质量分 86
断剑zou天涯
两脚沾地,实事求是
展开
-
设计模式总结
设计模式总结原创 2023-04-22 19:23:49 · 92 阅读 · 0 评论 -
解释器模式——解析语法,分离实现
解释器模式主要用户解析某一种特性的语法,在日常的开发中使用较少。其目的是定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,这里的 "语言" 是指使用规定格式和语法的代码。在实现思路上,解释器将统一的解释逻辑分成了两种类型的实现,一种是终结符号解释器,一种是非终结符号解释器,注意,这里说的是两类,不是两个,在同一类的解释器中,可以实现多个解释器实现类,具体要看需要解析的语法规则,在使用的时候可以联系组合模式,在嵌套的过程中,解析语法规则,达到能够复用的逻辑。原创 2023-04-21 19:56:12 · 251 阅读 · 0 评论 -
访问者模式——预留通道,回调实现
访问者模式使用的场景首先是要有一套不同类型的元素数据,这些数据在数据量和类型等方面可能完全不一样,只是属于逻辑上的一个类型,比如都是客户,企业客户和个人客户就只是逻辑上的客户类型一样,实际上的数据完全不同,其次就是要在这些不同类型的数据上增加一个业务功能,这个功能对于不同的元素数据有不同的实现,而且这些业务功能还有扩展的可能。于是,元素类型和需要动态增加的功能就构成了两个继承体系。思路就是在元素类型上增加一个访问的接口,然后将新增加的功能作为一个访问者传到具体的元素类型中去访问数据,但是访问数据的逻辑元素类原创 2023-04-21 08:01:07 · 93 阅读 · 0 评论 -
观察者模式——订阅通知的的典型实现
观察者模式是日常编程中常见的设计模式,主要用于在一对多的关系中,一个类状态或者数据的变化,多个类需要跟着改变的场景,这种场景中变化是一种单向的依赖关系。在实现思路上,就是让被观察的类持有一个需要通知的类的列表,当被观察者变化的时候,就可以挨个去通知观察者对象,让其根据自身的逻辑去变化。观察者模式本质上是一种事件中断机制,平时观察者不会时时刻刻去关注被观察对象,当被观察对象有变化的时候,就会自动通知过来,然后观察者再去处理对应的逻辑。原创 2023-04-20 19:38:30 · 137 阅读 · 0 评论 -
中介者模式——封装网状交互成为星型交互
中介者模式是一种日常编程中不常用到的设计模式,它的中心思想是将原来多个类之间的交互封装成只和固定的一个对象交互,从而减少交互的复杂性,使的系统的可扩展性增强。生活中典型的应用便是电脑的主板,我们都知道,计算机是有CPU、内存、显卡、硬盘等多种硬件设备组成的,在完成一件工作的时候,它们几个设备之间会相互的交互处理出具,这就让交互变得非常复杂,这个时候如果再新增一个设备,以前的每个设备都要感知这个设备,会非常的麻烦。为了解决这个问题,电脑主板便产生了,每一个设备都只和主板交互,不和其他的设备交互,使的原来的网状原创 2023-04-15 18:00:05 · 88 阅读 · 0 评论 -
备忘录模式——保存和恢复内部状态
备忘录,顾名思义就是把当时的内容保存下来,以便日后使用。在软件设计模式中,备忘录模式就是指在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将这个对象恢复到保存的时候的状态。因为平时编程中会使用数据库作为保存数据的载体,所以备忘录模式并不会有太多的使用,大多数在文本处理和日志打印等场景中才会有所使用到。原创 2023-04-15 14:57:07 · 127 阅读 · 0 评论 -
状态模式——根据状态来分离和选择行为
状态模式适用于不同的状态有不同的逻辑的场景,其中心思想就是根据状态分离和选择行为,体现在编程上就是分离大量的if ... else语句。我们日常编程中处处可以见到状态模式思想的应用,比如我们可以根据一个字段的不同枚举值,需要有不同的业务逻辑走向,这就是典型的状态模式的应用场景,只是实际的编程中我们利用数据库将保存字段的值和判断逻辑这两个代码进行了分离,所以就很少用得上传统的状态模式的写法而已。原创 2023-04-15 11:30:15 · 148 阅读 · 0 评论 -
命令模式——封装命令对象来分离请求者和真正的执行者
命令模式虽然本质上是分离了请求者和执行者,但是其设计重点还在命令对象本身,我们抽象出的命令对象并不像外观模式中的外观类一样只是一个门面,而是承载了更多的命令相关的功能,也就是说,命令对象的不同实现已经代表了不同的命令,在处理命令的逻辑时,是由命令对象来确定具体是调用真正实现者的什么方法,而不是由调用者指定,这一点就非常的重要。而且命令模式除了调用逻辑外,在很多场景中还会伴随着撤销和重做等各种功能,具体的实现也是由命令对象来控制调用的。原创 2023-04-13 09:12:18 · 60 阅读 · 0 评论 -
责任链模式——分离职责,动态组合
责任链模式是将一连串的业务职责进行细分,使多个对象各自负责其中一部分的职责,然后将这些对象连城一条链,将请求沿着这条链进行传递,直到将这个业务逻辑处理完成为止。责任链模式可以用于整条链都是在处理一个功能的场景,比如权限的校验,各自校验一部分,直到链上的节点都走完为止;也可以用在一个功能只需要链上一个节点来处理的场景,在这种场景中,请求在链上传递,直到一个节点处理了请求为止。原创 2023-04-12 20:14:47 · 357 阅读 · 0 评论 -
建造者模式——创建复杂对象的方法
建造者模式属于创建型模式,目标是为了创建一个复杂的对象。具体的思路是:将一个复杂对象的创建过程和需要构建的部件或者数据进行分离,由一个建造者对象Builder来获取创建对象的部件或者数据,然后让一个指导者Director对象来指导创建过程,最终创建出需要的产品。原创 2023-04-12 19:20:25 · 144 阅读 · 0 评论 -
迭代器模式——以统一的方式访问聚合对象中的元素
我们都知道,在计算机中,内存本质上是可以理解为一种类似抽屉的东西,在内存中放置一组集合对象,就有两种的方式:一种是连续放置,在java和c等编程语言中就是数组,这种放置方式放置和获取元素都比较方便,直接用下表就可以,但是扩容比较麻烦;另一种就是随便放,在每一个元素中记录下一个的内存地址,在java中就是链表的方式,这种方式天然支持良好的扩展性,但是随机访问就比较麻烦。而且在链表的基础上,为了取存更加的方便,后面还设计出了二叉树等各种数据结构,在不同的数据结构上,访问集合中的各种元素其实是依赖于数据结构本身的原创 2023-04-12 08:36:55 · 103 阅读 · 0 评论 -
策略模式——分离算法,选择实现
策略模式的本质就是选择不同的算法实现,其适用的是经常变动的业务场景,比如某个软件的计费方式,某个商品的活动打折等。在这类场景中,随着业务的发展,就会有新的算法出现,而且我们软件需要快速的响应,以便满足业务场景的要求。实现的思路是:我们需要抽象算法的整体接口,然后将具体的实现方式和使用的地方区分开来,使的有新的算法出现的时候,客户端可以自由的选择需要的算法,快速的满足业务的要求。原创 2023-04-10 19:45:04 · 136 阅读 · 0 评论 -
模板方法模式——分离固定的算法骨架和具体的实现
模板方法模式指的是定义一个操作中的算法骨架,而讲具体的一些实现步骤延迟到子类中去实现。模板方法模式使的子类可以不改变一个算法的结果即可重新定义该算法的某些特定步骤。在java中,很多地方都是用到了这种设计模式的思路,比如java的排序,我们可以自定义一个实现了Comparable接口的类,就可以实现自定义排序的功能。模板方法模式还经常用于框架的开发中,比如spring和servlet等框架就大面积用到了这个模式,这是因为框架中很多时候需要固定一些功能,而一部分需要根据后续的业务具体来实现,在这个过程中原创 2023-04-10 08:20:02 · 67 阅读 · 0 评论 -
桥接模式——抽象与实现之间的桥梁
桥接模式是一个相对来说比较难以理解的设计模式,它主要的思想是将抽象和实现两个维度进行分离,使其能够在各自的体系中单独的变化,然后用桥接的方式,将两者联系在一起。在使用桥接模式的时候,我们首先要分清楚抽象和实现的两个维度,然后才能做连个体系的桥接。原创 2023-04-05 12:59:26 · 171 阅读 · 0 评论 -
适配器模式——不兼容接口之间相互转换的桥梁
适配器模式的主要目的是将一个不兼容的接口转换成一个需要的接口,这种情况在生活中非常的常见,我们的身边就由非常多的适配器例子,大到将几十万伏的高压转换成220v的变压器,小到我们身边各种手机的充电器转换头,都是适配器思想的体现。在我们软件的设计中,也常常会遇到将原来已经设计好的接口转换成现在需要的接口情况,在这种场景中,我们就可以使用适配器模式来解决这个问题。原创 2023-04-05 11:06:34 · 76 阅读 · 0 评论 -
组合模式——组合模式的常见两种写法
组合模式的目的是用一种统一的方式来处理整体和部分的关系,常见的就是树形结构,叶子节点和包含叶子节点的组合节点之间,有着不同的处理逻辑,常见的就是组合节点拥有一个叶子节点的集合,可以添加或者删除叶子结点,而叶子节点没有这个功能,所以为了统一处理这种逻辑,就出现了组合的设计模式。原创 2023-03-31 08:28:34 · 254 阅读 · 0 评论 -
享元模式——分离和共享的思路体现
享元模式的整体思路就是分离和共享,有些地方直接将享元模式理解成了缓存,其实缓存是享元模式的其中一种应用而已,其并不能完全代替享元模式的思想:享元模式是为了解决大量细粒度的对象占用内存而设计的,将大量细粒度的对象进行共享使用,这样能够在很大的程度上解决内存的问题,但是缓存其实是为了提高访问速度的一种空间换时间的方法,它并不强调内存占用少,事实上很多的缓存设计还增大了内存的占用;但是他们的实现方式上都会有一个缓存的位置,不管是享元的缓存Map还是缓存的服务器,都可以理解成一个放置共享对象的map原创 2023-03-28 16:52:16 · 102 阅读 · 0 评论 -
装饰模式(Decorator)示例详解
装饰器模式的uml结构图如下所示:Component : 组件对象的接口,可以给这些对象动态的添加职责ConcreteComponent :具体的对象,实现组件对象的接口,通常是装饰器的原始对象,后面的装饰器就是要给这些对象添加职责。Decorator : 所有装饰器对象的父类,需要和组件接口一致的接口,并且持有一个组件对象ConcreteDecorator :装饰器对象的具体实现,实现具体要添加的功能。实现思路。原创 2023-03-23 09:07:21 · 752 阅读 · 0 评论 -
外观模式方法介绍
外观模式是一个比较简单的设计模式,我们在日常的开发过程中,经常用用到它。它的本质思想就是,它是最小知道原则的很好的体现方式,如果一个系统里面包含了很多的子系统,外部需要调用这个子系统里面的模块,如果没有外观模式的加入,外部调用系统就需要自己去单独调用内部的各个模块,这个时候,内部的情况就会暴露给外部,给系统的可扩展性造成了影响。原创 2023-03-23 07:52:34 · 62 阅读 · 0 评论 -
代理模式——实现代理模式三种方式的思考
静态代理、JDK动态代理、Cglib静态代理原创 2023-03-17 20:19:27 · 511 阅读 · 0 评论 -
原型模式——java实现原型模式的几种写法
java实现原型的几种写法原创 2023-03-16 15:48:48 · 247 阅读 · 0 评论 -
简单工厂、工厂方法、抽象工厂三种设计模式总结
简单工厂模式、工厂方法模式、抽象工厂模式总结原创 2023-03-15 19:44:13 · 264 阅读 · 0 评论 -
软件设计的七大设计原则
设计原则转载 2023-03-14 11:27:17 · 79 阅读 · 0 评论 -
懒汉式单例模式的常用的几种写法
懒汉式单例模式的常用的几种写法原创 2023-03-09 08:51:10 · 211 阅读 · 0 评论