面试装逼第一节-当面试官问你懂设计模式吗,知道spring框架里面用到了那些吗?来这里,给你装逼技巧。

   前言

     每个人面试时都需要些干货来帮助自己拿到自己满意的薪资,当面试官想了解你的java技术水平,那是必问设计模式,设计模式就相当于,一个人写代码的水平,一个人代码的好与烂,从对设计模式的理解就可以体现出。而作为java的业界标杆spring,就自然作为面试官询问这个问题的切入点,一方面可以看下你spring的源码能力,另一方面也可以考察一下你自己的代码水平能力,而如果你答的不咋地,那么就会等到一句话,“回去等通知吧”!那么下面我来告诉你,spring中我看到了那些设计模式,以及具体源码位置。

   1.工厂模式

     工厂模式分为三种,简单工厂模式,工厂方法,抽象工厂。这里我也简单介绍一下,工厂顾名思义,就是生产某类东西的,而对应到java代码里面那就是生成对象几种方式,原先我们生成对象的方式都是我们自己亲力亲为,new一下一个女朋友出来了,什么事都得亲力亲为这样就会很累,而如果你将找女朋友这事委托给媒婆(这里指的就是工厂)由他去帮你搞,那么你不是就省事很多,那在代码里面的意思就是进行解耦,提升代码的可维护性,spring IOC的思想也不就是如此,你不用自己干(创建bean),我帮你送上门(你要什么调一下我的getBean方法,我给你送到),省时省力。好了下面我介绍一下spring什么地方用到了它

          这里也是我们初学spring的时候,以工厂bean方法的形式创建bean,这里就是工厂方法

 ApplicationContext提供的getBean方法 ,不就是通过defaultListableBeanFactory,去根据传进来的bean类型,去找到相应的beanDefinetion然后去创造一个对应的java对象,这不就是简单工厂模式,根据类型去创建吗!

 2.单例模式

      单例模式简单来说,就是创建一个bean,来提供一个全局访问点,如下图在这类中加beanFactory,在这个类中,然后环境初始化创建beanFactory,后面整个环境就是这个一个beanFactory,springbean的默认创建也是单例模式,创建一个对象后保存起来,提供一个访问点,供你去获取它。这种模式很简单,设计的原理就是为了节约资源,进行复用。单例的几种模式什么懒汉式,DCL之类的都是为了创建一个对象。然后用一个静态变量去提供一个全局访问点。

3.代理模式

 Spring的AOP面向切面编程不都是运用代码模式进行对目标方法的包装。这个很常见,基本只要是个框架都有这种模式。代理模式就不在多说了,也比较简单。

4.模板方法

AbstractApplicationContext提供的Refresh方法中不就是个模板,我主体框架已经写好了就是那么7,8个方法调用来实现我SpringContext的创建,里面有些方法我不实现,扩展给你去实现。这个设计模式的思想就是公司的架构师提供给你搭一个架子,你就在我这个架子下去具体看怎么做,这也是Spring框架极具扩展性的一点,可以让我们用户根据自己的需求去定制自己的东西。这种模式也就不再多说,很常见没什么。

5.适配器模式

在Spring中以Adapter结尾的类应用的都是适配器模式,简单来说这种模式就是适配器类完成被适配类的动作,并在适配器类中完成一些其他动作,Spring的AOP的MethodInteptor的那些什么前置拦截,不就是在代理模式的基础上,在通知层面在对方法进行一层包装。其实最典型的也就是springMVC,doDispatch中对目标方法的调用中。与代理模式的不同个人觉得也就是方法名字层面了。

6.策略模式

Spring中在bean的创建过程中,如下代码通过传哪一种ObjectFactory的形式去完成实例的创建,这就是一个典型的策略模式,通过哪种工厂bean去创造对象,里面也是一种工厂方法。spring也是靠他解决循坏依赖的问题。

7.观察者模式

Spring的事件监听机制,不就是发布一个事件类型,然后去拿到对应的事件监听器,然后循环去调用监听器的方法,去完成动作,这个模式的思想就是发布方维护订阅方的信息,当发布方有事的时候,循环调用订阅方的方法去通知订阅方,这也是消息中间件的主要模式。这个模式也很简单。

 8.装饰器模式

 这种模式在Spring中的应用也就是为数据源这个类,提供多数据源切换的一个功能。这种模式也没什么说的,就是很简单对目标方法的包装,附属一些其他功能,

综上说出以上的设计模式及相关位置,足够应付面试了。

下一篇我会讲讲tomcat的http协议解析。

 

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读