Bootstrap

在Spring 当中存在的八大模式

在Spring 当中存在的八大模式

每博一文案

我认为 “知世故而不世故” 才是真正意义上的成熟。
     回归到小孩子的纯真和本心,经过岁月的洗礼和自我挣扎,兜兜转转,最后回归本我,找回初心。
     然而“初心是什么?”
     是小孩子的本性?是不畏惧他人眼光勇于做自己?是抛开世俗的观念,兜兜转转绕回到原点的真实?还是和想爱的人在一起因为三观而非其他?是不把他人的想法驾凌在自己之上,是回归到本我?
     真正的勇敢,是在这现实的世界里,理性浪漫主义般的活着。
     理想主义的可爱会让一个人不那么世俗化。而非世俗化就会显得不世故,在一些人看来就是不成熟,于是就幼稚了。无论“幼稚”还是“成熟”,本质上都是每个人基于自己的个性特点和社会环境,所作出的选择。
     它意味着你能承担“幼稚”或“成熟”所带来的风险与损失,也努力追求它所带来的收益与快乐。
     如果我们承认,人和人与生俱来的不一样。也承认,在一个发达的现代社会,我们可以以无数种方式去获得成功。甚至,连成功的定义,都可以由自己决定。那么,我们的生命应该会活得自由、珍重,而更有质感一点点吧。

在 Spring 当中存在着如下23种设计模式当中的 八大模式

  1. 简单工厂模式
  2. 工厂方法模式
  3. 单例模式
  4. 代理模式
  5. 装饰器模式
  6. 观察者模式
  7. 策略模式
  8. 模板方法模式

1. 简单工厂模式

BeanFactory 的 getBean() 方法,通过唯一的标识来获取 Bean 对象,就是典型的简单工厂模式(静态工厂模式) 。简单工厂模式步属于23种设计模式的任何一种.

想要进一步,学习工厂方法模式,大家可以移步至:✏️✏️✏️ GoF之工厂模式-CSDN博客

2. 工厂方法模式

FactoryBean 是典型的工厂方法模式,在配置文件种通过 factory-method 属性来指定工厂方法,该方法时一个实例方法。

想要进一步,学习工厂方法模式,大家可以移步至:✏️✏️✏️ GoF之工厂模式-CSDN博客

3. 单例模式

Spring 用的是双重判断加锁的单例模式,请看下面代码:

在这里插入图片描述

由于单例模式,涉及的篇幅过多,大家可以移步至:✏️✏️✏️ 23种设计模式:单例设计模式(饿汉式 VS 懒汉式)_单件模式 饿汉式csdn-CSDN博客

4. 代理模式

Spring的 AOP 就是使用动态代理实现的。

想要进一步,更加深入的了解代理模式,大家可以移步至:✏️✏️✏️ GoF之代理模式(静态代理+动态代理(JDK动态代理+CGLIB动态代理带有一步一步详细步骤))-CSDN博客

5. 装饰器模式

JavaSE中的IO流是非常典型的装饰器模式。
Spring 中配置 DataSource 的时候,这些dataSource可能是各种不同类型的,比如不同的数据库:Oracle、SQL Server、MySQL等,也可能是不同的数据源:比如apache 提供的org.apache.commons.dbcp.BasicDataSource、spring提供的org.springframework.jndi.JndiObjectFactoryBean等。
这时,能否在尽可能少修改原有类代码下的情况下,做到动态切换不同的数据源?此时就可以用到装饰者模式。
Spring根据每次请求的不同,将dataSource属性设置成不同的数据源,以到达切换数据源的目的。
Spring中类名中带有:Decorator和Wrapper单词的类,都是装饰器模式。

6. 观察者模式

定义对象间的一对多的关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。Spring中观察者模式一般用在listener的实现。
Spring中的事件编程模型就是观察者模式的实现。

在Spring中定义了一个ApplicationListener接口,用来监听Application的事件,Application其实就是ApplicationContext,ApplicationContext内置了几个事件,其中比较容易理解的是:ContextRefreshedEvent、ContextStartedEvent、ContextStoppedEvent、ContextClosedEvent

7. 策略模式

策略模式是行为性模式,调用不同的方法,适应行为的变化,强调父类的调用子类的特性。

getHandler 是 HandlerMapping 接口中的唯一方法,用于根据请求找到匹配的处理器。

比如我们自己写了 AccountDao 接口,然后这个接口下有不同的实现类:AccountDaoForMySQL,AccountDaoForOracle。对于service 来说不需要关心底层具体的实现,只需要面向 AccountDao 接口调用,底层可以灵活切换实现,这就是策略模式。

8. 模板方法模式

Spring 中的 JdbcTemplate 类就是一个模板类。

它就是一个模板方法设计模式的体现,在模板类的模板方法 execute() 中编写核心算法,具体的实现步骤在子类中完成。想要进一步了解,模板方法模式,大家可以移步至:✏️✏️✏️ 23种设计模式之 : 模板方法设计模式_模板实例的设计模式有哪些-CSDN博客

最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述

;