博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring中设计模式
阅读量:5744 次
发布时间:2019-06-18

本文共 2718 字,大约阅读时间需要 9 分钟。

MVC模式

Model:pojo、数据库交互(业务数据和业务逻辑)

View:Jsp(与用户交互页面)
Controller:控制器(接收请求并决定调用哪个模块组件去处理请求,然后决定调用哪个视图(通过转发或重定向)来显示返回的数据)

单例模式

利用双重检查锁定(Double-Checked Locking)来降低同步的开销

public class Singleton {     private static volatile Singleton sInstance = null;    private Singleton () {    }   public static Singleton getInstance () {        if (sInstance == null) {             Synchronized(Singleton.class){                if (sInstance == null) {                    sInstance = new Singleton();                          }                   }         }         return sInstance;    }}

为什么需要用volatile修饰变量sInstance ?

因为sInstance = new Singleton();这行代码实际上做了以下工作:

memory = allocate();  // 1:分配对象的内存空间ctorInstance(memory); // 2:初始化对象instance = memory;  // 3:设置instance指向刚分配的内存地址

1、2、3指令可能会重排序为1、3、2,将导致外层判断出instance不为空,该线程接下来将访问instance引用的对象,而此对象事实上是一个还未初始化的对象。故需要加修饰,可以确保外层null检查要么看到的是null,要么看到的是一个构造完整的对象。

volatile可以保证有序性和可见性(即读操作在写操作之前)。

工厂模式
简单工厂:是一个具体的类,有一个重要的create()方法,根据入参判断new哪个实例,不符合开闭原则,扩展性差,新增需要修改工厂类方法。create()方法通常是静态的,所以也称之为静态工厂。
工厂方法:提供一个用于创建对象的接口(工厂接口),让其实现类(工厂实现类)决定实例化哪一个类(产品类),并且由该实现类创建对应类的实例。利用多态性
抽象工厂:是可以生产多个产品的,而工厂方法模式则只能生产一个产品。
适配器模式

将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作,类似生活中转接头的概念。
类适配器模式:通过继承来实现适配器功能。只能访问A接口,但想要调用B中的方法b,可以写适配器类P实现A接口,并继承B接口的实现类,这样就可以调用P中的方法b。
对象适配器模式:与上述类似,但只需实现A接口,并创建一个B的实现类的实例为成员变量bInstance,即可在a()中调用bInstance.b()。
接口适配器模式:已有一个包含很多方法的接口,创建一个实现该接口的实现类P,以置空的方式实现所有方法,我们需要哪些方法就直接继承P并重写对应的方法,而不需要重写所有的方法。

  • 使用场景
    • 系统需要使用一些现有的类,而这些类的接口不符合系统的需要,甚至没有这些类的源代码
    • 创建一个可以重复使用的类,用于和一些彼此之间没有太大关联的类,包括一些可能在将来引进的类一起工作

优点:将目标类和适配者类解耦,灵活性和扩展性都非常好,完全复合开闭原则。

缺点:一次最多只能适配一个适配者类,不能同时适配多个适配者。

工厂方法

方式:实现FactoryBean接口。

原理:
实现了FactoryBean接口的bean是一类叫做factory的bean。其特点是,spring会在使用getBean()调用获得该bean时,会自动调用该bean的getObject()方法,所以返回的不是factory这个bean,而是这个bean.getOjbect()方法的返回值。

public SqlSessionFactory getObject() throws Exception {    if (this.sqlSessionFactory == null) {      afterPropertiesSet();    }    return this.sqlSessionFactory;      //返回的不是 SqlSessionFactoryBean 的实例,而是 SqlSessionFactoryBean.getObject() 的返回值}

适配器模式

方式:SpringMVC中的适配器HandlerAdatper。

原理:HandlerAdatper根据Handler规则执行不同的Handler。
过程:
DispatcherServlet根据HandlerMapping返回的handler,向HandlerAdatper发起请求,处理Handler。HandlerAdapter根据规则找到对应的Handler并让其执行,执行完毕后Handler会向HandlerAdapter返回一个ModelAndView,最后由HandlerAdapter向DispatchServelet返回一个ModelAndView。
实现意义:
HandlerAdatper使得Handler的扩展变得容易,只需要增加一个新的Handler和一个对应的HandlerAdapter即可。因此Spring定义了一个适配接口,使得每一种Controller有一种对应的适配器实现类,让适配器代替controller执行相应的方法。这样在扩展Controller时,只需要增加一个适配器类就完成了SpringMVC的扩展了。

  • 不同类型的Handle
    • 继承Controller方式所使用的适配器:SimpleControllerHandlerAdapter
    • HTTP请求处理器适配器:HttpRequestHandlerAdapter
    • 注解方式(@Controller)的处理器适配器:RequestMappingHandlerAdapter

转载于:https://www.cnblogs.com/xiaobingzi/p/10684595.html

你可能感兴趣的文章
Linux 网络命令必知必会之 tcpdump,一份完整的抓包指南请查收!
查看>>
RouteReuseStrategy angular路由复用策略详解,深度刨析路由复用策略
查看>>
Zabbix4.0 for PostgreSQL (下篇):后续部署及添加监控项
查看>>
JavaScript 代码简洁之道
查看>>
基于django的视频点播网站开发-step6-个人中心功能
查看>>
Tomcat两种部署方式
查看>>
Kubernetes API 分析 ( Kube-apiserver )
查看>>
4-学会刷Wi-Fi模块固件(刷AT指令固件)
查看>>
ASP.NET Core 2 学习笔记(五)静态文件
查看>>
Button 使用Command 按钮置灰未更新
查看>>
Ansible windows客户端安装及部分模块使用(学习笔记十六)
查看>>
PostgreSQL控制台以竖行显示
查看>>
CSS-Flex 布局教程:实例篇
查看>>
Java和移动端交互
查看>>
Java SSM 客户管理 商户 管理系统 库存管理 销售报表 项目源码
查看>>
排序优化——如何实现一个通用的、高性能的排序函数
查看>>
IDEA中css文件包红色下划线
查看>>
js中bind、call、apply函数的用法
查看>>
OC高效率52之多用GCD,少用performSelector系列方法
查看>>
sqoop导入关系型数据库-解密Sqoop
查看>>