
设计模式
代码量不够
词汇量不多
展开
-
设计模式之:适配器模式
业务场景手上有新老俩接口和一个老接口的实现类但是现在系统中要面向新接口来开发,老接口的实现类就不能直接用了,不能直接面向老接口来开发开发一个老接口到新接口的一个适配器适配器是实现了新接口的,但是适配器中持有老接口实现类实例的引用适配器的新接口方法的实现,全部基于老接口实现类的老方法来实现即可对于调用方而言,只要使用适配器来开发即可,就可以通过面向新接口开发,底层使用老接口实现类/*...原创 2019-07-23 15:53:27 · 139 阅读 · 0 评论 -
设计模式之:命令模式
业务场景一般就是说,你可能会执行一些操作,这些操作都实现一个接口但是有不同的命令实现,然后命令的执行类就是同一个,你需要执行哪个命令就封装那个命令后发送给执行类即可命令模式非常适合跟工厂方法模式结合起来使用,就是使用多个工厂来制造出不同的命令类来,将命令的构造放在工厂方法中public class CommandPatternDemo { public static void m...原创 2019-07-31 17:33:30 · 127 阅读 · 0 评论 -
设计模式之:组合模式
业务场景组合模式非常适用于有较多父子层级关系的那种场景,比如部门树的递归删除,或者是文件树的递归删除之类的场景。import java.util.ArrayList;import java.util.List;public class CompositePatternDemo { public static void main(String[] args) { ...原创 2019-07-31 17:40:57 · 184 阅读 · 0 评论 -
设计模式之:策略模式
业务场景我们可以根据不同的参数来选择一种我们想要执行的优惠计价方式策略模式,将会成为最最高频使用的一种设计模式常见应用场景,就是替换掉那一大坨复杂难懂的if else if else对于那种过于复杂的选择判断逻辑,完全可以将选择哪种策略的过程放到工厂里去工厂,可以是简单工厂,也可以是工厂方法,也可以是抽象工厂package com.icode.edu.boot.test.strateg...原创 2019-07-31 17:47:43 · 156 阅读 · 0 评论 -
设计模式之:状态模式
业务场景(1)销售出库单,状态需要从新建、待审批、已审批、已完成,四个状态之间流转,流转到每个状态的时候,都需要执行那个状态对应的一个逻辑其实状态模式,就是维护多种不同的状态,每种状态下可以去执行一些特殊的逻辑。然后由一个Context类负责根据请求参数调用,来维护这些状态之间的切换,形成一个状态机的概念。状态模式里,非常重要的一点就是将状态之间流转的逻辑,封装在Context类里面。本来可...原创 2019-07-31 17:53:15 · 692 阅读 · 0 评论 -
设计模式之:备忘录模式
业务场景(1)某个类,计算出来一份中间数据(2)这个类,之后需要基于这份中间数据再执行另外两次操作,每次操作都要基于这份中间数据去执行(3)第一次基于中间数据操作过后,会对中间数据做出修改(4)要求是第二次再执行操作的时候,需要基于未修改之前的中间数据来执行备忘录模式看起来有点复杂,其实不复杂,说白了,就是一个类一开始生产了一些数据,这些数据可能会被改变,但是需要将这些中间数据保存起来,...原创 2019-07-31 18:03:08 · 155 阅读 · 0 评论 -
设计模式之:享元模式
业务场景(1)我们现在要缓存一些数据,比如说权限,根据权限的ID作为key,权限数据自己本身是value(2)但是我们不需要使用太复杂的ehcache框架之类的去使用,特别特别的简单的(3)我们就想基于自己的Map去实现一套东西享元模式,从最基本的角度来说,其实就是维护固定数量的对象实例,不同的对象实例,只有一个,然后保存在内部的一个map中。可以算是跟单例模式的一个扩展和结合吧。imp...原创 2019-07-31 18:13:14 · 197 阅读 · 0 评论 -
设计模式之:装饰器模式
业务场景(1)假设我们手头已经有了一个类,可以执行一些功能(2)但是我们还是希望对这个类的功能做一些增强,此时怎么办呢?基于已有的类的功能基础之上,再增强一些功能,可以做装饰装饰器模式有一些非常经典的实现(1)比如java的io体系,可以一层包装一层,一层包装一层,外面的一层,都会对立面的一层进行功能的增强。(2)还有就是spring的aop,aop这块可以基于动态代理的理念,装饰我们的...原创 2019-07-31 18:17:17 · 169 阅读 · 0 评论 -
设计模式之:责任链模式
业务场景(1)现在在某一个地方的业务流程,要执行功能1、功能2、功能3(2)现在在另外一个地方的业务流程,是要先执行功能3,然后执行功能1和功能2责任链模式,那也是经常会使用到的,对于那种复杂的业务流程一种方案是采取面向对象的设计,将不同的业务逻辑封装到不同的类里去,然后通通过方法中的调用来控制业务流向另外一种就是采用责任链模式,将业务逻辑封装到不同的handler里面去,形成链条式调用...原创 2019-07-31 18:26:22 · 224 阅读 · 0 评论 -
设计模式之:桥接模式
所谓的桥接,就是搭建一个桥,让两个组件之间互相调用,可以通过桥来执行因为有了桥,两个代码组件无论怎么修改,都互相没有影响这个桥,实际上就是一个接口所以说,java中,无处不桥接,只要你是面向接口编程,基本就是在桥接public class BridgePatternDemo { public static void main(String[] args) { Im...原创 2019-07-31 18:33:26 · 247 阅读 · 0 评论 -
设计模式之:观察者模式
业务场景(1)比如我们有一个目标对象,一旦这个目标对象的状态改变了,然后的话就去通知相关的对象,我的状态改变了,数据也变化了观察者模式常见于基于zookeeper进行分布式系统之间的协调工作,比如分布式锁的注册以及监听是否释放。还有就是两个系统之间如果做了异步的处理,那么如果A系统发送异步请求给了B系统,但是要得到B系统的一个状态改变的消息,可以采用观察者模式。基于zookeeper去做分...原创 2019-07-31 17:20:39 · 123 阅读 · 0 评论 -
设计模式之:代理模式
业务场景(1)懒加载:hibernate、mybatis,都可以实现懒加载,其实也是基于动态代理思想实现的,对刚查询出来的对象做一个代理。然后去调用getX()方法的时候,再实际执行sql查询出来关联的数据。通过hibernate / mybatis,查询出来这个classroom的时候,是没有级联将students数据从数据库里查出来的。接下来,如果你要从classroom中获取studen...原创 2019-07-25 16:57:57 · 178 阅读 · 0 评论 -
设计模式之:模板方法模式
业务场景:(1)我们有多种优惠策略(2)不同的优惠策略在计算的价格的时候,有一些通用的基础逻辑(3)每种优惠策略还有一些是自己特殊的价格计算的逻辑每种优惠方式计算器里面,都有一段通用的计算逻辑,是完全相同的代码但是相同的一段代码,给通过复制粘贴的方式,放到了不同的类里去一旦说,那段通用的计算逻辑,要修改,就涉及到多个类都要去修改那个代码如果你一旦忘了修改某个类中的那段代码,后果不堪设...原创 2019-07-23 16:16:54 · 150 阅读 · 0 评论 -
设计模式之:简单工厂方法模式
业务场景如果你直接面向一个类来编程,new来创建类的实例的话我们如果对Product,要更换一个类,换一个类的实现此时就必须在创建这个类实例的地方,都要修改一下这个代码如果你有100个地方,都创建了Product这个类的实例你需要在100个地方都去修改这个new Product()的这段代码代码可维护性和可扩展性之差,惨不忍睹/** * 简单工厂模式 */public clas...原创 2019-07-23 17:30:14 · 111 阅读 · 0 评论 -
设计模式之:工厂方法模式
模板方法模式 + 简单工厂模式,简单工厂模式稍微复杂一点的变种场景:(1)我们现在要生产的产品有多种(2)每种产品的生产过程,都有一些是共同的逻辑,但是也有一些是特殊的逻辑如果不使用设计模式在工厂类中,有生产产品的相同的通用逻辑,没有抽取出来,直接复制粘贴放多个工厂里了如果那段通用逻辑要修改就需要很麻烦到所有工厂中去修改代码;可能会忘记修改某个工厂的代码/** * 工厂方法模式...原创 2019-07-23 17:46:26 · 249 阅读 · 0 评论 -
设计模式之:抽象工厂方法模式
业务场景:(1)就是我们现在要生产的不是一个一个产品,而一个一个的产品组合(2)比如说我们有产品ABC,现在第一种产品组合是A1+B3,第二种产品组合是A2+B2,第三种产品组合是A3+B3(3)就是要对工厂模式进行进一步的增强其核心思想是,如果需要一个工厂,这个工厂可以生产出相关联的一批产品,然后不同的工厂实现,会生产出一批不同的产品组合/** * 抽象工厂方法模式 */publ...原创 2019-07-23 18:18:48 · 103 阅读 · 0 评论 -
设计模式之:单例模式
场景比如说,你自定义了一个框架,自定义了一份xml格式的一个配置文件,你要读取这个配置文件,这个配置文件中的数据,读取到类中,这个类的实例,只要保存一份就可以。那么此时可以使用单例模式,将这个类做成他的实例只能有一个,在这个实例中保存了配置文件中的数据但是使用单例模式有一个要求,不允许这个类的逻辑过于复杂,一般就是持有某份配置文件的配置,或者是别的一些数据所以只能是简单的情况下,用单例模式,...原创 2019-07-23 19:49:32 · 109 阅读 · 0 评论 -
设计模式之:外观模式
业务场景1、假设我们现在有两个子系统2、子系统A,有多个内部模块,模块A、模块B和模块C3、子系统B,现在有一个功能,需要同时依赖3个模块来实现一个功能外观模式其实很简单,假设我们有一个系统A吧,自己内部有多个代码组件,每个代码组件都可以实现一些功能。此时如果别的系统B要调用系统A实现某个功能,此时一种方法是,系统B调用系统A的多个代码组件的方法,最终实现一个功能。另外一个选择,就是系...原创 2019-07-25 15:43:22 · 131 阅读 · 0 评论 -
设计模式之:构造器模式
业务场景构造一个复杂的对象,很多的属性,有些属性构造的时候需要做一些校验,格式转换常见于在构建一个复杂的对象,或者是构建一个复杂的表达式的时候,在开源框架中有大量广泛的运用在Mockito框架中,when().thenReturn()之类的,其实就是构造器模式的一种,通过多个连续的方法完成一个模拟对象的构建还有就是spring test框架汇总,MvcMock对象,也是通过thenExpe...原创 2019-07-25 15:58:02 · 750 阅读 · 0 评论 -
设计模式之:原型模式
业务场景如果一个对象,我们希望拷贝一个这个对象,就是弄出来这个类的另外一个实例,实例的属性跟之前的实例是一模一样的我们要用原型模式,以某一个对象为原型,然后对这个对象进行拷贝,得到拷贝后的另外一个对象原型模式,顾名思义,其实说白了,就是让一个对象可以自己拷贝自己,对象把自己当成一个原型,然后提供一个方法出去,外部要一个对象的克隆和拷贝,直接就copy一份就可以了,但是这里要记住深拷贝和浅拷贝...原创 2019-07-25 16:37:41 · 110 阅读 · 0 评论 -
设计模式之:中介者模式
业务场景(1)三个模块(2)模块1调用模块2和模块3;模块2要调用模块1和模块3;模块3要调用模块1和模块2这个模式,担心的就是系统中各个子系统之前互相之间调用,乱成一团所以就将系统之间互相调用的逻辑给放到一个所谓的中介者里面去。每个系统如果要通知别的系统干个什么事儿,直接就是调用中介者,中介者负责去调用别的系统。中介者这个模式说白了就是要让各个系统之间彻底解耦,不要互相强耦合在一起,...原创 2019-07-25 16:49:34 · 216 阅读 · 0 评论 -
设计模式之:访问者模式
业务场景(1)组合模式,我们现在想象一下,我们之前做的是说递归删除部门自己本身(2)但是我们现在要对他改造一下,将组合模式和访问者模式结合起来,就是说,我们可以让那颗树执行我们想要他做的任何事情访问者模式,是对目标对象,动态的执行某个功能,而不对目标对象有任何的改动import java.util.ArrayList;import java.util.List;public clas...原创 2019-07-31 18:37:16 · 240 阅读 · 0 评论