自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

weixiaohuai的博客

任何质变都来自于量变的积累。

  • 博客(21)
  • 资源 (1)
  • 收藏
  • 关注

原创 设计模式 (二十二) 责任链模式

一、概念概念:职责链模式,又叫责任链模式,指的是多个请求接收者串成一条链式结构,一个请求到达请求链上,如果该接收者不能处理请求则会将请求继续往下传递(通常每个接收者都包含对另一个接收者的引用),以此类推,直到找到有一个请求接收者能够处理该请求。职责链模式将请求发送者和请求接收者进行了解耦,此种模式属于行为型模式。 职责链模式常用场景有: Java中异常的处理,层层抛出; 拦截器链的...

2019-11-30 15:31:22 450

原创 设计模式 (二十一) 策略模式

一、概念概念:策略模式,指的是定义一系列的算法,将他们一个一个封装起来,然后在运行期间可以动态改变类执行的算法(动态改变类的行为)。策略模式属于行为型模式。(封装一组可以互相替代的算法族,并且可以根据需要动态地去替换 Context 使用的算法)。在日常生活中有挺多策略模式的例子,如旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略;又比如我们设计一个排序算法,可能有很多种实现方...

2019-11-30 15:08:02 455

原创 设计模式 ( 二十) 备忘录模式

一、概念概念:备忘录模式,又叫做快照模式,指的就是提供一种方式,对原始对象的状态信息进行备份,保存对象某个时间的状态,以便于后期可以恢复到原先的状态。备忘录模式属于行为型模式。其实有很多备忘录模式的例子,像我们平常使用的开发工具如Ctrl + Z就提供了一种撤销的功能、我们通常的事务回滚等都是备忘录模式的范例。 通用类图:角色分析: Original: 原始对象,即需要被备...

2019-11-30 14:46:39 243

原创 设计模式 ( 十九) 中介者模式

一、概念概念:中介者模式,其实就是定义了一个具体中介者对象来协调各个子系统的交互依赖关系,使得各个子系统之间不会显式地发生依赖关系,从而降低了耦合性。中介者模式也是属于行为型模式。 生活中有挺多中介者模式的示例,比如我们使用的QQ聊天室和短信平台等等,QQ服务器和短信平台其实就是充当了一个中介者角色,通过这个平台我们就可以与其他QQ用户进行聊天或者发短信,并不需要依赖其他用户。还有就是...

2019-11-30 09:27:45 292

原创 设计模式 (十八 ) 观察者模式

一、概念概念:观察者模式,就是当一个对象的状态发生变化时,能自动通知其他依赖其的对象,并且更新他们的状态。观察者模式属于行为型模式。通过观察者模式,使得某个对象与其他依赖它的对象保持状态同步。(观察者订阅被观察者的状态,当被观察者状态改变的时候会通知所有订阅的观察者的过程) 大体UML类图:角色分析: Subject:抽象被观察者角色,也叫被订阅对象,通常是接口或者抽象类。当需要被观...

2019-11-30 09:08:24 744

原创 设计模式 (十七) 迭代器模式

一、概念概念:迭代器模式,又叫做游标模式,指的是提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节,迭代器模式属于行为型模式。 通用UML类图:角色分析: 抽象迭代器角色(Iterator):通常情况下定义了访问和遍历元素的接口; 具体迭代器角色(ConcreteIterator):需要实现抽象迭代器接口并且实现其中的抽象方法, 实现对聚合对象的遍历并要记录遍历...

2019-11-30 08:50:33 389

原创 设计模式 (十六) 命令模式

一、概念概念:命令模式,指的是将请求以命令的形式封装成一个对象,传给调用对象,然后调用对象去找能处理该命令的接收者,然后由命令接收者真正去执行命令。命令模式属于行为型模式。上面这句话理解起来相对比较抽象,百度百科有个比较好理解的例子:电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮,不同的按钮对应电视机的不同操作。抽象命令角色由一个命令接口来扮演,有三个具体的命令类实现了抽...

2019-11-28 21:17:12 274

原创 设计模式 ( 十五 ) 模板方法模式

一、概念概念:模板方法模式,又叫模板模式,在抽象类中定义一个执行方法的模板,子类可以根据需要重写其中的方法,简单理解就是为其他子类提供一个算法框架。模板方法模式属于行为型模式,是借助于继承来实现的。 通用UML类图:角色分析:抽象模板(Abstract Template)角色:定义了模板方法以及整个实现的大体步骤,具体的子类需要实现其中的抽象方法;(抽象基类定义算法框架) 模...

2019-11-28 20:54:16 255

原创 设计模式 (十四) Cglib动态代理模式

一、概念概念:Cglib动态代理,其实就是被代理的对象可能不是一个接口,而仅仅是一个单独的对象,这样可以使用被代理对象的子类来实现代理的方式。Cglib是在内存中构建一个被代理对象的子类实现对被代理对象功能的扩展。 底层实现原理:利用字节码处理框架ASM转换字节码并生成新的类。二、示例示例:同样还是使用前面的租房子案例使用Cglib实现动态代理。【a】UML类图详细代理如下...

2019-11-27 21:33:57 307

原创 设计模式 ( 十三 ) JDK动态代理模式

一、概念动态代理模式:根据代理的对象,动态创建代理类,可以有效避免静态代理中代理类接口过多的问题。 实现方式:代理对象不需要再实现抽象接口了,但是被代理对象还是需要实现抽象接口;利用JDK中反射包下面的Proxy.newProxyInstance()方法动态地在内存中创建代理对象:/** * public static Object newProxyInstance(C...

2019-11-27 21:11:01 253

原创 设计模式 ( 十二 ) 静态代理模式

一、简介概念: 代理模式:为对象提供一个替身或者代理,控制对该对象的访问。即通过代理对象去访问目标对象,这样可以动态扩展目标对象的功能。 代理模式有三种模式: 静态代理 动态代理(JDK代理/接口代理) Cglib代理 通用类图:即客户端通过代理对象去访问目标对象,而不是直接访问目标对象,可以控制目标对象的访问。本文先讲解一下静态代理模式的实现方法。二、静...

2019-11-26 21:01:40 253

原创 设计模式 (十一) 外观模式

一、简介概念:外观模式,也叫过程模式,外观模式为各个子系统或者子对象提供了一致的高层接口,通过定义一个高层接口,用以屏蔽内部子系统的实现细节,使得客户端不直接与各个子系统进行关联,而是直接调用高层接口提供的方法。外观模式也属于结构性模式。 传统方式原理图:客户端直接依赖各个子系统,这样子系统发生一点变化,客户端就要改,不符合开闭原则。可见,客户端直接调用各个子系统的接口。外...

2019-11-17 09:37:37 416

原创 设计模式 (十) 装饰者模式

一、简介概念:装饰者模式,就是动态地扩展对象的功能,是继承的一个替代。如果不用装饰者模式,我们想要扩展一个对象的功能,可以通过继承该对象,然后重写里面的的方法来实现扩展原有功能,但是当对象变化频繁的时候,这种子类会有很多,装饰者模式有效避免了这种大量创建子类的现象,动态地扩展对象的功能。就增加功能来说,装饰者模式相比使用继承生成大量子类方式更为灵活。 装饰者模式大体UML类图:二、角...

2019-11-17 09:16:58 473

原创 设计模式 (九) 组合模式

一、简介概念:组合模式,又叫部分 - 整体模式,组合多个对象形成树形结构以表示有整体-部分关系层次结构,组合模式可以让客户端统一对待单个对象和组合对象。组合模式使得客户端不需要区分哪些是叶子,哪些是容器节点,都统一处理,极大地方便方法调用。组合模式属于结构性模式。 大体类图如下:组合模式相关角色说明:【a】component:抽象构建,可以是抽象类,也可以是接口,包含所有子类共有的行...

2019-11-13 21:12:57 329

原创 ES6 将数组根据某个属性进行分组的方法

一、简介最近在项目中,有需求需要将数组根据某个属性进行重新分组,然后循环遍历,于是自己写了一个分组的方法,总结如下(笔者使用的React):buildArrayGroup = (oldArray = []) => { console.log('oldArray', JSON.stringify(oldArray)); let resultArray ...

2019-11-12 16:24:20 11288

原创 Mybatis ResultMap传递参数给子Collection对应查询的ResultMap中

一、问题描述最近在做项目时,需要使用Mybatis的ResultMap高级映射查询“校区 - 楼栋 - 楼层”树结构的数据,前端提供很多过滤条件都是子查询楼层的一些字段属性,并不是所有的参数都是最外层查询的过滤条件,但是ResultMap本身不支持将参数从外层的查询一直传递到子查询。举个简单的例子,mapper接口传递了一些参数到mapper.xml中,如果不额外处理,这些参数只能在最外面...

2019-11-12 15:57:40 7624 5

原创 Mybatis foreach逗号分隔字符串遍历方式

一、前言最近在项目中,做高级搜索时,由于搜索条件过多,而且每个选项的值都很多,这些条件都需要拼接到sql语句IN查询中,所以我前端直接传递逗号分隔的多个值,直接使用Mybatis的foreach切割功能,直接查询,感觉挺方便的。二、使用方式【a】前端传递查询条件:使用逗号分隔参数值。【b】后端Mapper接口使用Map接收接收:public List<FjcwxxT...

2019-11-12 14:40:37 11685 2

原创 设计模式(八)桥接模式

一、简介概念:将抽象部分与它的实现部分分离开来,使他们可以在多个维度独立变化。桥接模式将继承关系转换为关联关系(组合或者聚合)来实现,符合合成复用原则。这样有利于降低类之间的耦合度,同时也减少了类的数量,方便后期扩展维护。举个例子: 模拟画图。现有一个需求:需要绘制大中小型号的图形,图形分长方形、正方形、圆形等等,图像分大、中、小等型号,这里有两个维度(大小、图形类型)都会进行变化,...

2019-11-09 21:19:52 321

原创 设计模式 (七) 适配器模式

一、简介概念:适配器模式,将某个类的接口转换成客户端期望的另一个接口表示,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作,主要目的就是为了兼容,适配器模式属于结构型模式。主要分为三种模式: 类适配器模式; 对象适配器模式; 接口适配器模式;工作原理示意图:适配器模式涉及角色: 目标(Target):客户端所期待得到的接口; 适配器(Adaper)角色:适...

2019-11-09 20:57:00 515

原创 设计模式 ( 六 ) 建造者模式

一、简介概念:建造者模式,也属于创建型模式,就是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。简单理解就是说:建造者模式、可以将部件和其组装过程分开,一步一步创建一个复杂的对象。它隐藏了复杂对象的创建过程,它按照一定的顺序创建复杂对象,用户只需要给出复杂对象的类型即可获取对应的实例对象,即在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。举个...

2019-11-05 21:07:59 359

原创 设计模式 (五) 原型模式

一、简介概念: 使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象,原型模式属于创建型模式,它提供了一种创建对象的最佳方式。形象比喻:细胞复制分裂,下面是网上找的细胞分裂图由图可见,复制新细胞的行为也是细胞自身发起,其实就是说原型对象自己不仅是个对象还是个工厂。原型模式,通过克隆方式创建的对象是全新的对象,它们都是有自己的新的地址,hashcode不同, 复...

2019-11-03 11:24:38 295

zipkin-server jar.zip

spring cloud zipkin服务链路跟踪server相关jar包,下载完成之后使用java -jar zipkin-server-2.12.9-exec.jar方式运行,就能启动zipkin-server,不建议自己搭建zipkin-server

2020-08-29

空空如也

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

TA关注的人

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