设计模式-Spring中常用的设计模式

作者&投稿:韶牲 (若有异议请与网页底部的电邮联系)

设计模式是一种思想,是一种更快更好更优雅地解决问题的一种思想。这种思想在很多优秀的框架中都有落地。比如 Spring 框架。

接下来,我将从我的角度出发,粗浅的想一下,Spring 框架中常用的一些设计模式。

Spring 框架核心解决的问题是什么呢?个人理解是为了解决对象之间复杂的依赖关系,降低耦合。或者可以这么说,做项目我们也可以什么框架都不用,实现功能的时候,创建多个类,自己去维护类什么时候创建、使用、销毁等生命周期以及类之间的关系。自己维护的很好或者功能很简单的话,也可以不使用框架。框架本身也就是一个黑盒工具而已,开源使我们可以将其白盒化。

既然Spring框架的核心内容假设是解决对象之间复杂的依赖关系。 通俗来说便是“要啥给啥”。为了实现这个目的,Spring 核心的 IOC 容器出现了,对象都放在这个容器里,需要的时候从里面取。那就涉及到几点:

1. 创建对象,保存对象,保存对象之间的关联关系

2. 获取对象

涉及到如何创建,是只创建一次还是创建多次,有关联关系,先创建A还是先创建B等。 单例模式、原型模式、工厂模式、策略模式 可以来帮忙。

工厂模式:

Spring 中的 BeanFactory、FactoryBean

单例模式

保证一个类仅有一个实例,并提供一个全局访问点。Spring 下默认创建的 Bean 都是单例对象。

常用的单例模式写法又有很多:最简单的就是 懒汉式了,还有 饿汉式、注册式、序列化方式、枚举方式等。

原型模式

Java 中的克隆对象。以某个对象为原型,复制出一个新的对象。两个对象内容相同,但是对象实例不同。

用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。

策略模式:

一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。

获取对象的时候,有策略方法,也可以通过代理进行功能增强等。策略模式、代理模式、模板方法模式、适配器模式、装饰器模式等

代理模式:

为其他对象提供一种代理以控制对这个对象的访问。从结构上来看和 装饰器模式类似, 但 Proxy 是控制,更像是一种对功能的限制,而 装饰器是增加职责。

Spring 的 AOP 代理,应该是很出名的。JdkDynamicAopProxy、Cglib2AopProxy。

模板模式:

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。比如 JdbcTemplate

适配器模式

将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

Spring AOP 模块对 BeforeAdvice、AfterAdvice、ThrowsAdvice 三种通知类型的支持实际上是借助适配器模式来实现的,这样的好处是使得框架允许用户向框架中加入自己想要支持的任何一种通知类型,上述三种通知类型是 Spring AOP 模块定义的,它们是 AOP 联盟定义的 Advice 的子类型。

属于结构型模式,适配类与被适配类之间没有必然联系。满足 has-a 关系。

装饰器模式

属于结构型模式。满足 is-a 关系。

Spring 中用到的包装器模式在类名上有两种表现:一种是类名中含有 Wrapper,另一种是类名中含有 Decorator。基本上都是动态地给一个对象添加一些额外的职责。

观察者模式:

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象 都得到通知并被自动更新。

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。

Spring 中 Observer 模式常用的地方是 Listener 的实现。如 ApplicationListener。



~

java开发需要掌握哪些技术?
答:第三阶段,Java高级框架-SSH:Struts2 异常处理、Struts2+Log4j集成、Struts2和JSON实例、Hibernate5、Hibernate集合映射、Hibernate组件映射、Spring4.0、Spring AOP + AspectJ框架、Spring 与其它Web框架集成、Spring Hibernate支持等。第四阶段,Java高级框架-SSM:SpringMVC、Spring MVC生成JSON数据、MyBatis...

跪解:ssh框架的基本原理?
答:Spring真正的精华是它的loc模式实现的BeanFactory和AOP,它自己在这个基础上延伸的功能有些画蛇添足。 Spring它是一个开源的项目,而且目前非常活跃;它基于IoC(Inversion of Control,反向控制)和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层 中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择...

在Struts2中,DAO属于那一层?
答:夹在业务逻辑与数据库资源中间。Struts是java在web开发中常用的框架之一。是利用了MVC设计模式。MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。那么常用的框架还有比如:hibernat和spring。那么在,SSH设计过程中,Struts只...

spring是什么,有什么作用,主要用在什么地方,好不好学,对社会有什么作用...
答:.Prototype:在此模式中,每次获取将创建一个独立的对象。例如,这可以被用于允许用户拥有他们自己的对象。 由于 org.springframwork.beans.factory.BeanFactory是一个简单的接口,它能被为了底层存储方法而实现。你能够方便地实现你自己的BeanFactory,尽管很少用户需要。最为常用的定义是: .XmlBeanFactory: 可解析简单直观的...

java工程师需要掌握哪些知识
答:成员和方法名首字母小写,方法名的第一个单词一般是动词,包名全部小写等,这样程序的可读性才比较好。10、博学:掌握J2EE 、Oracle 、WebLogic、Jboss、Spring、Struts、Hibernate 等流行技术,掌握软件架构设计思想、搜索引擎优化、缓存系统设计、网站负载均衡、系统性能调优等实用技术。

java的框架有哪些啊??
答:有很多,比如:struts struts2.0,hibernate,spring等等,你去csdn看看,那里面全 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 更多回答(1) 其他类似问题 2020-06-02 java学习的主流框架有哪些? 2018-04-18 java开源框架有哪些? 2 2019-08-30 Java框架有哪些?要学哪个? 2 2011-08-24 java框架大全...

怎样学习java
答:目前比较好的开发模式是采用自定向下的面向对象的设计,加上MVC的模式( 你可以看一下我介绍的关于MVC的内容)。首先要找出最顶层的对象(这往往是最难的) ,然后一层一层往下递归 ,记住每次应符合7+/-2的原则,因为我们人的短记忆就是这样。一般有图形用户界面的 应从界面开始设计。5。有了基本...

stm32f103微控制器通用定时器的常用工作模式有哪些
答:1:计数模式,是最基本的工作模式,有向上计数,向下计数和双向计数3种模式。2:输出比较模式。3:PWM输出模式。4:输入捕获模式。5:PWM输入模式。6:单脉冲模式。7:编码器接口。//这个不太确定。对的话请赞一下o(* ̄▽ ̄*)ブ

java开发需要学习什么?
答:开发中为什么会用框架,Rest是啥?Spring为啥经久不衰,底层如何实现等。6.23种设计模式,掌握常用的,比如单例模式的多种实现,责任链模式,工厂模式,装饰器模式等,了解常用场景。7. 基础算法和数据结构,八大排序算法,查找算法。8. 熟练使用maven等构建工具,git等版本控制工具,熟悉常用linux命令,log4j,dubug,junit单元测试...

JAVA开发工程师必须懂什么
答:如果开发的话,要掌握的有:熟悉一门数据库开发,最好是Oracle,当然很多人学习中都是用的MySql。掌握最流行的轻量级框架SSH(struts2,hibernate,spring),框架太多了,但是这3个应用比较多,只要把这3个掌握了找工作基本问题不大了,因为有了这3个作为基础,你再学习其他框架也就是几天时间的问题了...