设计模式
文章平均质量分 90
it_lihongmin
不要觉得自己怎么样,现实就是比你厉害的人,比你更努力!
当才华撑不起自己野心的时候,老老实实地踏实学习吧!
展开
-
模板+策略+责任链模式 - 在项目中的使用
整理一下,之前在项目中基于需求,在项目中使用了模板和策略模式、并且在其实使用到了线程池,还是先说一下项目背景,因为所有的设计模式都是基于业务的落地。1、项目背景批量将采购订单根据条件处理开成销售订单或者预销售订单的过程(即:批量采购订单=销售订单+预销售订单),首先是可以有多条路径发起转单流程,由于整个过程判断条件比较多,并且在很多地方处理条件根据发送路径不同,处理的方式也不同。考虑到又是批量转单流程又长中间需要查很多rpc,所有在中间使用到了线程池并行处理,将责任链拆单完的订单放入每个线程中并行。原创 2021-12-30 14:52:13 · 1615 阅读 · 0 评论 -
动态代理模式-在项目中的使用(基于feign源码写自己的rpc报表框架)
设计模式-总览https://mp.csdn.net/mp_blog/creation/editor/1222025071、项目背景 报表服务导出服务经常会涉及jvm、io等异常情况,所以想要将报表的查询和导出在两个服务中进行,并且报表的查询是在k8s环境中的一个微服务,而报表的真正执行服务是在一个虚拟机。需要将报表的查询和导出两个阶段在两个...原创 2022-01-04 17:09:55 · 1254 阅读 · 0 评论 -
设计模式-总览
个人理解,设计模式就是要多看写的好的架构比如Spring、Mybatis等,要多用就是多在项目上进行使用,哪怕又是觉得是脱裤子放屁稍显多余,比如责任链模式,当链条类型只有一两个的时候就显得多余,但是链条有七八种十多种情况时就凸显价值了。 自己看过Head First设计模式并将其demo大致敲了一遍,学习完成后对某个设计模式的理解在脑袋里是映像A,当去读Spring源码时,对某个设计模式的理解又完全不同了。比如Spring中AbstractApplicationContext#refresh的模板..原创 2021-12-28 21:18:03 · 451 阅读 · 0 评论 -
责任链模式 - 项目中的使用
责任链模式在项目中的应用原创 2021-12-28 16:48:58 · 735 阅读 · 0 评论 -
代理模式-静态代理、JDK和Cglib动态代理
目录一、静态代理1、静态代理实现二、动态代理1、Jdk动态代理2、Cglib动态代理 个人理解:说到代理模式马上静态代理和动态代理。静态代理就是已经确定A 要去访问B,但是为了一些特殊情况防止耦合(在A中初始化B的引用),那么使用一个中间的Proxy进行代理,那么A中需要引入依赖Proxy,Proxy再去调用B。但是当这种情况比较多(C需要访问D在增加一个代理。。...原创 2019-11-12 13:41:01 · 304 阅读 · 1 评论 -
装饰器模式-简单实现和(InputStream、ServletRequest)实现分析
目录一、装饰器模式实现二、装饰器模式使用场景分析1、Jdk的InputStream实现分析2、ServletRequest 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。《HeadFirst设计模式》上的装饰器模式的例子,我觉得还是比较形象的。有很多的饮...原创 2019-11-12 18:55:50 · 269 阅读 · 0 评论 -
责任链模式-实现和Servlet、Spring Aop、Zuul中的责任链模式分析
目录一、责任链实现二、Servlet、Spring Aop、Zuul中的责任链模式分析1、Servlet中的Filter2、Zuul中的责任链模式分析1)、FilterFileManager2)、ZuulServlet3)、Spring Aop责任链模式 责任链模式定义:使多个对象都有处理请求的机会,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象串成一...原创 2019-11-13 17:49:22 · 663 阅读 · 0 评论 -
建造者模式-各框架应用场景穷举
建造者模式使用非常的多,各大框架源码都有使用,一方面也是链式编程的推动。个人愚见,要非常好的了解一种设计模式,那么首先就是应用场景,多穷举一下各优秀源码的使用场景就足以理解了。1、lombok@Data@Builderpublic class User { private Long id; private String name;}public class...原创 2019-11-05 22:46:07 · 862 阅读 · 0 评论 -
原型模式-简单实现和Spring源码分析
设计模式并不是Java独有的,但是Java提供了一个接口Cloneable,只要有一个类实现了该接口则可以在内存中直接拷贝对象,让原型模式的实现变的非常的简单。但是Cloneable接口是浅拷贝(这个就要去理解一下深拷贝和浅拷贝的区别了)。所以当一个对象进行clone时,如果对象中存在对象,如User对象有个属性Department dept是对象,则克隆出来的对象和源对象的dept属性指...原创 2019-11-05 18:09:33 · 826 阅读 · 4 评论 -
观察者模式-Spring事件发布订阅实现和源码分析
在上一篇观察者模式-jdk实现和自定义实现分析后,发现jdk已经简化了很多的开发成本。然而,我们现在很多时候开发环境已经在Spring的ApplicationContext容器中,已经必须要自己再去使用jdk实现(当然上一篇博客了解观察者模式的实现我觉得还是很重要的)。Spring认为发布订阅主题,其实可以理解为事件驱动的编码,先来实现以下Spring容器中的事件发布订阅。 ...原创 2019-11-03 23:40:49 · 545 阅读 · 0 评论 -
观察者模式-jdk实现和自定义实现分析
来自《Head First设计模式》的例子为发布订阅天气数据,当天气数据更新时自动更新面板上的天气数据。 个人理解:观察者模式可以理解为事物之间存在一对一或者一对多的关系,当事物存在变化时需要通知其他关联事物发生变化。也可以理解成发布订阅模式,类似于消息可以进行系统解耦;只是消息可以理解成分布式的解耦(即跨进程的解耦),而该观察者模式为进程内部的发布订阅关系。一、自己实现观察...原创 2019-11-03 17:35:49 · 235 阅读 · 0 评论 -
模板方法模式-项目中的使用
一、订单系统完成订单方法使用模板方法模式1、背景介绍发现线上和线下订单,其实逻辑都差不多,却写了两套差不多相同的东西。于是决定重构一下,方法如下:@Transactional(rollbackFor = Exception.class) public void completeOrder(DanluOrderCompleteVO complete) { Bus...原创 2019-11-03 11:29:35 · 491 阅读 · 0 评论 -
模板方法模式-简单实现和Spring中的使用分析
目录一、模板方法模式1、父类定义骨架2、子类实现特殊的处理3、测试调用4、执行结果二、Spring中的模板方法模式分析1、AbstractApplicationContext最重要的refresh方法使用模板方法模式实现2、SpringJDBC使用模板方法模式实现模板方法模式应该在项目中的使用会比较广泛,父类定义了骨架(调用哪些方法及顺序),某些特定方法由子类实...原创 2019-11-03 11:08:45 · 3545 阅读 · 0 评论 -
策略模式-项目中的使用
目录1、背景介绍2、使用策略加工厂的实现方式3、使用策略加枚举的调用方式在项目进行重构的时候,会发现有很多的判断,或者枚举类型的处理。则策略模式应该是比较好的方式,基于上一篇博客所述, 策略模式使其可以理解为Java的多态实现(父类引用指向不同实现的子类对象),就Spring的DispatcherServlet的九大件的默认配置,使用的则相应于是一个事先定义好规则的Map,根据不同...原创 2019-11-02 23:17:59 · 778 阅读 · 0 评论 -
策略模式-简单实现和Spring源码中的使用分析
目录一、策略模式1、 创建一个策略抽象2、策略的N中实现3、为策略的调用创建一个触发容器(方法调用触发)4、测试简单的策略模式二、Spring中的策略模式1、Spring MVC中 DispatcherServlet 使用策略模式 策略模式其实之前一直想写的,并且在项目中也用过。但是最近项目上进行重构,想将一个枚举类的判断转为策略进行调用,解耦方便扩展时,发现...原创 2019-11-02 13:58:56 · 712 阅读 · 0 评论 -
单例模式-七种写法
package demo.lihongmin.singleton;// 饿汉式 单利模式public class Singleton1 { // 构造私有 private Singleton1(){} // 声明一个静态变量保存单利的引用 private static final Singleton1 single = new Singleton1(); // 通过静态方法获取单原创 2017-07-24 23:46:50 · 289 阅读 · 0 评论