首页 > 编程知识 正文

springmvc设计模式和应用场景,spring框架中使用了哪些设计模式

时间:2023-05-05 04:19:24 阅读:240190 作者:201

本文主要对常用的几种设计模式介绍:

设计模式:一套反复使用、经过分类编目的代码设计经验总结;

若想详细了解可参考:https://www.runoob.com/design-pattern/adapter-pattern.html

1.创建型模式:

这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。

单例模式
工厂模式

2.结构型模式:

这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。

适配器模式
装饰者模式
代理模式

3.行为型模式:这些设计模式特别关注对象之间的通信。

观察者模式(发布订阅模式)

下面开始详细介绍常用的几种设计模式:

一、单例模式:

所谓单例设计模式简单说就是无论程序如何运行,采用单例设计模式的类(Singleton类)永远只会有一个实例化对象产生,并且提供一个全局的访问点。具体实现步骤如下:
(1) 将采用单例设计模式的类的构造方法私有化(采用private修饰)。
(2) 在其内部产生该类的实例化对象,并将其封装成private static类型。
(3) 定义一个静态方法返回该类的实例,通过静态方法返回instance对象
饿汉式,线程安全 但效率比较低,加载类即刻创造对象
(成就的烤鸡式)饱汉式,非线程安全,用到的时候才创建对象

成就的烤鸡式1:线程不安全

public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }

成就的烤鸡式2:线程安全
在成就的烤鸡式1的getInstance方法前加synchronized

饿汉式:线程安全(推荐)

class Singleton { private Singleton() {} // 将构造方法封装为私有化 private static Singleton instance = new Singleton();// 在内部产生本类的实例化对象 public static Singleton getInstance() { // 通过静态方法返回instance对象 return instance; } public void showMessage() {System.out.println("Hello World!");}}class SingletonPatternDemo { public static void main(String[] args) { //不合法的构造函数 //编译时错误:构造函数 SingleObject() 是不可见的 //SingleObject object = new SingleObject(); //获取唯一可用的对象 SingleObject object = SingleObject.getInstance(); //显示消息 object.showMessage(); }} 二、工厂模式:

意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
主要解决:主要解决接口选择的问题。
何时使用:我们明确地计划不同条件下创建不同实例时。
如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
关键代码:创建过程在其子类执行。
使用场景
1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。
2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。

三、适配器模式:

将一个类的接口转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以相互合作。
例如:手机充电器一般都是5V左右吧,咱天朝的家用交流电压220V,所以手机充电需要一个适配器

四、装饰者模式:

若要扩展功能,装饰者提供了比集成更有弹性的替代方案,动态地将责任附加到对象上。当我们设计好了一个类,我们需要给这个类添加一些辅助的功能,并且不希望改变这个类的代码,这时候就是装饰者模式大展雄威的时候了。这里还体现了一个原则:类应该对扩展开放,对修改关闭。

五、观察者模式:

观察者模式属于行为型模式,其意图是定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

六、迭代器模式:

迭代器模式属于行为型模式,其意图是提供一种方法顺序访问一个聚合对象中得各个元素,而又不需要暴露该对象的内部表示。

七、代理设计模式:

指由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其他相关业务的处理。

spring中用到的设计模式:

1.工厂设计模式
Spring使用工厂模式可以通过 BeanFactory 或 ApplicationContext 创建 bean 对象。
前者需要时创建bean,内存占用少,后者一次性创建所有的bean,内存消耗大,并且提供扩展功能。
ApplicationContext的实现类:ClassPathXmlApplication

2.单例设计模式
有一些对象其实我们只需要一个,比如说:线程池、缓存、对话框、注册表、日志对象、充当打印机、显卡等设备驱动程序的对象。

优点:对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销;由于 new 操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻 GC 压力,缩短 GC 停顿时间。

Spring 中 bean 的默认作用域就是 singleton(单例)的

3.代理模式
Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候Spring AOP会使用Cglib ,这时候Spring AOP会使用 Cglib 生成一个被代理对象的子类来作为代理

4.观察者模式
观察者模式是一种对象行为型模式。它表示的是一种对象与对象之间具有依赖关系,当一个对象发生改变的时候,这个对象所依赖的对象也会做出反应。Spring 事件驱动模型就是观察者模式很经典的一个应用。Spring 事件驱动模型非常有用,在很多场景都可以解耦我们的代码。比如我们每次添加商品的时候都需要重新更新商品索引,这个时候就可以利用观察者模式来解决这个问题。

5.适配器模式
适配器模式(Adapter Pattern) 将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。

我们知道 Spring AOP 的实现是基于代理模式,但是 Spring AOP 的增强或通知(Advice)使用到了适配器模式,与之相关的接口是AdvisorAdapter。如前置通知后置通知等。

在Spring MVC中,DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler。解析到对应的 Handler(也就是我们平常说的 Controller 控制器)后,开始由HandlerAdapter 适配器处理。HandlerAdapter 作为期望接口,具体的适配器实现类用于对目标类进行适配,Controller 作为需要适配的类。

6.模板方法模式
Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。

mybatis中用到的设计模式:

1.工厂模式
在Mybatis中比如SqlSessionFactory使用的是工厂模式,该工厂没有那么复杂的逻辑,是一个简单工厂模式。
SqlSession可以认为是一个Mybatis工作的核心的接口,通过这个接口可以执行执行SQL语句、获取Mappers、管理事务。

2.代理模式
代理模式可以认为是Mybatis的核心使用的模式,正是由于这个模式,我们只需要编写Mapper.java接口,不需要实现,由Mybatis后台帮我们完成具体SQL的执行。

3.适配器模式
例如Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现;

觉得不错的小伙伴可以右上角点个赞或关注哟!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。