设计模式
文章平均质量分 84
程序猿秃头之路
这个作者很懒,什么都没留下…
展开
-
设计模式——享元模式
今天我们来学习最后一个设计模式:享元模式。相对来说,享元模式的原理和实现也比较简单,并且在实际的项目开发中也不怎么常用。概述享元模式:(Flyweight Design Pattern)运用共享技术有效的支持大量细粒度的对象。所谓享元,顾名思义就是被共享的单元。享元模式的意图是复用对象,节省内存,前提是享元对象是不可变对象。当一个系统中存在大量重复对象的时候,如果这些重复的对象是不可变对象,我们就可以利用享元模式将对象设计成享元,在内存中只保留一份实例,供多处代码引用。这样可以减少内存中对象的数量原创 2021-11-22 08:52:42 · 268 阅读 · 0 评论 -
设计模式——组合模式
今天我们来学习结构型设计模式中的组合模式,组合模式的应用场景较为特殊,要求数据必须能表示成树形结构,这就导致了组合模式在实际的项目开发中并不那么常用。概述组合模式:(Composite Design Pattern)将一组对象组织(Compose)成树形结构,以表示一种部分-整体的层次结构。组合让客户端可以统一单个对象和组合对象的处理逻辑。组合模式一般用来描述整体与部分的关系,它将对象组织到树形结构中,顶层的节点被称为根节点,根节点下面可以包含树枝节点和叶子节点,树枝节点下面又可以包含树枝节点和叶子节原创 2021-11-21 16:19:22 · 339 阅读 · 0 评论 -
设计模式——门面模式
今天我们继续来学习前面没有学完的结构型设计模式中的一种:门面模式。门面模式也是一种不太常用的设计模式。所以,我们今天依旧是了解为主,暂时不去深入的学习。概述门面模式:(Facade Design Pattern)门面模式也叫外观模式,门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。门面模式原理和实现也比较简单,应用场景也比较明确,主要在接口设计方面使用。何时使用:解决易用性问题。解决性能问题。解决分布式事务问题。UML 类图:角色组成:门面角色:客户端调用这个原创 2021-11-21 16:18:27 · 1153 阅读 · 1 评论 -
设计模式——中介模式
今天我们来学习最后一个行为型设计模式:中介模式。中介模式也属于不怎么常用的模式,应用场景比较特殊,所以,中介模式也不是学习的重点,稍微了解一下。概述中介模式:(Mediator Design Pattern)定义了一个单独的(中介)对象,来封装一组对象之间的交互。将这组对象之间的交互委派给与中介对象交互,来避免对象之间的直接交互。用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。实际上,中介模式的设计思想跟中间层很像,通过引入原创 2021-11-20 17:46:58 · 972 阅读 · 0 评论 -
设计模式——解释器模式
今天我们来学习解释器模式,比起命令模式,解释器模式更加小众,只会在一些特定的领域会被用到,比如编译器、规则引擎、正则表达式。所以,解释器模式也不是学习的重点,稍微了解一下。概述解释器模式:(Interpreter Design Pattern)解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。今天要学习的解释器模式,其实就是用来实现根据语法规则解读“句子”的解释器。何时使用:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单原创 2021-11-20 17:46:06 · 541 阅读 · 0 评论 -
设计模式——命令模式
今天我们来学习命令模式,这个设计模式使用频率较低,也不不太好理解,并且只应用在特定的环境下。所以,暂时不准备深入的学习,了解即可。概述命令模式:(Command Pattern)将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志。以及支持可撤销的操作。通俗一点讲就是将一系列的请求命令封装起来,不直接调用真正执行者的方法,这样比较容易扩展。何时使用:在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下原创 2021-11-20 17:45:05 · 86 阅读 · 0 评论 -
设计模式——备忘录模式
概述备忘录模式:(Memento Design Pattern)在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态。这个模式理解、掌握起来不难,代码实现比较灵活,应用场景也比较明确和有限,主要是用来防丢失、撤销、恢复等。何时使用:很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有"后悔药"可吃。UML 类图:角色组成:Memento: 包含了要被恢复原创 2021-11-20 17:44:03 · 525 阅读 · 0 评论 -
设计模式——访问者模式
访问者模式,可以说是23种设计模式中最复杂、最难以理解的一种了,并且使用频率不高,对于不常使用的设计模式,我会用较小的篇幅去介绍。概述访问者模式:(Visitor Design Pattern)允许一个或者多个操作应用到一组对象上,解耦操作和对象本身。访问者模式是一种将数据操作和数据结构分离的设计模式。何时使用:对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作。需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,也不希望在增加原创 2021-11-10 22:30:36 · 638 阅读 · 0 评论 -
设计模式——迭代器模式
概述相信大家平时开发过程中没少用过遍历集合、数组这些语法。一般来讲,遍历集合数据有三种方法:for 循环、foreach 循环、iterator 迭代器。实际上,foreach 循环只是一个语法糖而已,底层是基于迭代器来实现的。foreach 循环代码的底层实现,就是第三种遍历方式(迭代器遍历)。这两种遍历方式可以看作同一种遍历方式,也就是迭代器遍历方式。迭代器模式:(Iterator Design Pattern)也叫做游标模式(Cursor Design Pattern)。提供一种方法顺序访问一原创 2021-11-10 22:29:06 · 624 阅读 · 0 评论 -
设计模式——状态模式
概述状态模式:(State Pattern)允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。何时使用:状态模式一般用来实现状态机,而状态机常用在游戏、工作流引擎等系统开发中。代码中包含大量与对象状态有关的条件语句。什么是状态机?状态机有 3 个组成部分:状态(State)、事件(Event)、动作(Action)。其中原创 2021-11-07 14:53:06 · 178 阅读 · 0 评论 -
设计模式——职责链模式
概述职责链模式:(Chain of Responsibility Pattern)将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。具体来讲,在职责链模式中,多个处理器(也就是刚刚定义中说的“接收对象”)依次处理同一个请求。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再传递给 C 处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链原创 2021-11-06 19:18:41 · 146 阅读 · 0 评论 -
设计模式——策略模式
概述策略模式:(Strategy Design Pattern)定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式可以使算法的变化独立于使用它们的客户端(这里的客户端代指使用算法的代码)。打个比方说,我们出门的时候会选择不同的出行方式,比如骑自行车、坐公交、坐火车、坐飞机、坐火箭等等,这些出行方式,每一种都是一个策略。何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。UML 类图:角色组成:Context上下文: 也叫Context封装角色,起承上启原创 2021-11-04 09:18:45 · 249 阅读 · 0 评论 -
设计模式——模板模式
今天,我们来学习行为型设计模式中的第二个:模板模式。模板模式主要是用来解决复用和扩展 两个问题。话不多说,开始今天的学习。介绍模板模式(Template Method Design Pattern): 模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。这里的算法骨架就是“模板”,通用的代码实现很简单。原理与实现AbstracTemplate.javapublic abstract class原创 2021-11-02 21:53:14 · 322 阅读 · 0 评论 -
设计模式——观察者模式
今天,我们开始学习行为型设计模式中的一种:观察者模式。为什么结构型设计模式还没有学习完就开始学习行为型设计模式了呐?因为我想先学习一下相对来说比较常用的设计模式,结构型设计模式剩下的几种:门面模式、组合模式、享元模式相对来说没那么常用,于是先跳过这几种设计模式,最后再来学习这些不太常用的。行为型设计模式主要解决的就是”类与对象之间的交互“问题。介绍观察者模式 (Observer Design Pattern)也被称为发布订阅模式 (Publish-Subscribe Design Pattern)原创 2021-11-01 18:24:25 · 170 阅读 · 0 评论 -
设计模式——适配器模式
今天,我们学习一个比较常用的结构型设计模式:适配器模式。介绍适配器模式(Adapter Design Pattern) 将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作。在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。比如说我们很多人的手机现在都没有了耳机孔,需要一个转接头来充当适配器,一端连接耳机,一端连接手机的充电口,通过转接就可以正常使用有线耳机了。适配器模式有两种实现方式:类适配器、对象适配器原理与实原创 2021-08-29 18:18:15 · 974 阅读 · 0 评论 -
设计模式——装饰器模式
概述装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。它是作为现有的类的一个包装。若要扩展一个对象的功能,装饰器模式提供了比继承更有弹性的替代方案。组合优于继承。何时使用:需要扩展一个类的功能,或给一个类增加附加责任。需要动态的给一个对象增加功能,这些功能可以再动态地撤销。需要增加一些基本功能的排列组合而产生的非常大量的功能,从而使继承变得不现实。UML 类图:角色组成:抽象构件角色(Component): 定义可以动态添加任务的原创 2021-08-22 23:03:03 · 192 阅读 · 0 评论 -
设计模式——桥接模式
定义桥接模式(Bridge Pattern),也叫做桥梁模式,结构型设计模式的一种,这个模式相对来说有些难理解。桥接,顾名思义,就是用来连接两个部分,为被分离了的抽象部分和实现部分搭桥。官方一点的说法叫:将抽象部分与它的实现部分分离,使它们都可以独立变化。还有另外一种理解方式:一个类存在两个(或多个)独立变化的维度,我们通过组合的方式,让这两个(或多个)维度可以独立进行扩展。适用场景:如果一个系统需要在构建的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,可以原创 2021-08-21 17:43:15 · 5806 阅读 · 0 评论 -
设计模式——代理模式
创建型设计模式前面我们已经学完了,创建型模式主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。今天我们开始学习结构型设计模式,结构型设计模式主要总结了一些类或对象组合在一起的经典结构,这些经典结构可以解决特定应用场景的问题。话不多说,我们从代理模式开始学起。原理解析代理模式:为其他对象提供了一种代理以控制对这个对象的访问。在不改变原始类代码的情况下,通过引入代理类来给原始类附加功能。接下来,我们从一个例子来展现代理模式的实现原理:系统需要记录用户关键操作原创 2021-08-15 14:54:38 · 94 阅读 · 0 评论 -
设计模式——原型模式
继前面的单例模式、工厂模式、建造者模式之后,今天我们来学习最后一个创建型设计模式:原型模式。原理与应用当系统中需要大量创建相同或者相似的对象时,就可以通过“原型设计模式”来实现。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。原型模式的核心思想是,通过拷贝指定的“原型实例(对象)”,创建跟该对象一样的新对象。简单理解就是“克隆指定对象”。案例我们将创建一个抽象类 Shape 和扩展了 Shape原创 2021-08-13 18:25:33 · 204 阅读 · 0 评论 -
设计模式——建造者模式
介绍将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。优缺点优点:建造者独立,易扩展,有利于系统解耦。封装性好,构建和表示分离。客户端不必知道产品内部组成的细节,建造者可以对创建过程逐步细化,而不对其它模块产生任何影响,便于控制细节风险。缺点:产品必须有共同点,范围有限制。如内部变化复杂,会有很多的建造类,原创 2021-08-11 18:46:02 · 168 阅读 · 0 评论 -
设计模式——工厂模式
前言工厂模式(Factory Design Pattern)也是一种比较常用的创建型模式,它提供了一种创建对象的最佳方式,我们在创建对象时不会对客户端暴露创建逻辑,而是通过使用一个共同的接口来指定新创建的对象。工厂模式可以细分为三种类型:简单工厂、工厂方法和抽象工厂,简单工厂、工厂方法在实际的项目中比较常用,而工厂方法在实际的项目中相对不常用。简单工厂(Simple Factory)什么是简单工厂模式,我们通过一个例子来解释一下。1. 创建一个动物接口(Animal)/** * @Author原创 2021-08-08 12:04:37 · 151 阅读 · 0 评论 -
设计模式——单例模式
概念单例设计模式(Singleton Design Pattern) 是一种常见的设计模式,属于创建型设计模式,理解起来也非常简单。一个类只允许创建一个对象,那这个类就是一个单例类,这种设计模式就叫做单例模式。如何实现1.饿汉式饿汉式,instance 静态实例在类加载的时候就已经创建并初始化好了,所以,instance 实例的创建过程是线程安全的。/** * @Author: * @Description: 饿汉式 线程安全 */public class SingletonExampl原创 2021-08-07 17:54:23 · 231 阅读 · 0 评论 -
设计模式的分类
1. 创建型常用的有:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式。不常用的有:原型模式。2. 结构型常用的有:代理模式、桥接模式、装饰者模式、适配器模式。不常用的有:门面模式、组合模式、享元模式。3. 行为型常用的有:观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式。不常用的有:访问者模式、备忘录模式、命令模式、解释器模式、中介模式。...原创 2021-06-16 16:37:28 · 118 阅读 · 0 评论