spring中的设计与模式

我们直接切入正题,先来做个题,连线:

 

这是我心中的答案:

  • 简单工厂
  • 工厂方法
  • 单例模式
  • 适配器模式
  • 代理模式
  • 观察者模式
  • 策略模式
  • 模板方法

1. 简单工厂,spring使用BeanFactory,根据传入一个唯一的标识去获取Bean对象

Bean在BeanFactory中被spring包装为BeanDefinition放在ConcurrentHashMap中,这个其实可以理解为就是spring的容器了。虽然这里说是简单工厂,但是这个工厂不简单啊,我们经常会看到2种类在spring的源码中,XXXProcessor,XXXAware,这2种类都是为了增加或者定制化处理这个Bean,XXXProcessor是为了在实例化时调用我们定义的方法,XXXAware是为Bean添加一些属性,如:BeanFactoryAware,如果实现了这个接口,spring会帮我们注入BeanFactory。

一个Class的扩展,方法调用及属性添加,spring都为我们未来可能的扩展想好了。

2.工厂方法,主要是围绕FactoryBean来说,最常见的是SqlSessionFactoryBean,有时候我们可能为疑惑,这个FactoryBean跟BeanFactory就是单词反过来了,有什么不一样吗,其实咱们看问题的方向错了。我们不要拿它去跟BeanFactory比,我们跟Bean比,哎,我们发现,它比Bean多了个Factory,这里Factory是修饰词,一个工厂bean。要理解这个,我们可能要多花点时间,先来看下代码:

package org.springframework.beans.factory;

public interface FactoryBean<T> {
    T getObject() throws Exception;

    Class<?> getObjectType();

    boolean isSingleton();
}

上面是接口的定义,spring在我们getBean("factoryBean")时,会调用factoryBean的getObject方法,等于说是spring调用了我们自己定义的如何获取Bean的方法,再换句话说就是我们自定义了bean的生成方式。最后说下应用场景吧,当我们的bean生成比较复杂的时候,逻辑比较多的时候,我们就可以使用这种方式。

 

3.单例模式很好理解,默认情况下我们定义的bean在容器中是单例的,而spring如何使用单例的却蛮复杂的,这篇https://blog.csdn.net/qq_34886352/article/details/88313529说的蛮详细的

4.适配器模式,适配器模式其实蛮好理解的,举例说下,比如一个插座上只有2孔,来了个三孔插头,这个时候我们就需要这个

理解上面的问题,我们来看下spring在哪里是怎么用适配器模式的。

spring在2块地方都有用到适配器模式,一个是AOP另一个是mvc中,这里我只聊mvc,因为AOP中的我没看过。。。


 

5.代理模式

6.观察者模式

7.策略模式

8.模板方法

现在我们后台开发基本都离不开spring这个框架了,我们每天都在使用它,但有时候我们对它的了解却很少(我想这也是spring设计理念的一种,你对我知道的越少越好)。spring中有许多优秀的设计以及对设计模式结合实际使用的优秀的案例,这些都是值得我们借鉴的,我们日常开发业务跟spring框架开发维护人员是类似的,他们跟我们一样都是去完成这个业务去开发的,所以别人开发出的业务那么灵活,那么易于维护好用是值得我们借鉴的。

 

当我们按照设计模式的方式去进行编码时,会发现类图结构将会变得特别的复杂,而我们以前流水式的编码方式倒显得简单了,所以我们做设计不是生搬硬套,是依据情境折中的灵活的进行设计,就像是厨师,给了同样了材料,好的厨师做出的菜就是好吃,他掌握了什么,是火候,我们程序员的材料就是代码,那道菜就是一个个的系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值