spring中运用到的设计模式

单例模式

保证一个类智能通有一个实例对象,并提供外部对他的全局访问点。单例模式可以提高性能减轻GC的压力,但是有可能会出现线程安全问题。在Spring中使用了ConcurrentHashMap单例注册表的特殊方式实现了单例模式。

策略模式

它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到算法的调用者,调用感知不到底层实现的变化。策略模式就是定义一个接口,让接口实现类去实现各自不同的算法,定义一个Context类维护对接口对象的引用,结合简单工厂去实现对接口对象的实例化。Spring中的Resource类就是针对于引用不同资源的算法定义了不同的Resource实现类,实现去加载不同的资源。

代理模式

为其他对象提供一种代理以控制对这个对象的访问。
代理模式在Java中的应用就是动态代理.sSpring中的AOP就是基于动态代理实现的,JDK动态代理和CGLIB动态代理,JDK是在运行时通过接口与实现类来完成代理,CGLIB是在编译时操作字节码文件来基于子父类继承实现代理。代理的核心功能是增强业务方法和控制对象的访问。
SpringAOP旨在将与业务无关的却为业务所调用的逻辑和责任封装起来,例如事务处理,日志管理,权限控制等等。便于减少系统的重复代码,降低模块之间的耦合度。

模板方法模式

定义了一个操作中的算法的骨架,而将一些步骤延迟到子类。模板方法使得子类可以不改变一个算法的结构就可以重定义此算法的某些特点步骤。简而言之就是把不变的行为搬移到超累中去,去除子类中的重复代码。
在Spring中JDBCTemplate,RedusTemplate等等都使用到了模板方法模式。简化了连接数据源等操作,并提供基础的方法。spring使用了call back模式和模板方法配合达到了代码复用的效果,同时增加了代码的灵活性。

观察者模式

定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题在状态发生变化时,会通知所有的观察者对象,使它们能够自动的更新自己。当一个对象的改变时需要改变其他对象的时候就可以使用这个观察者模式。
Spring中的事件驱动模式就是一个经典的应用。
spring的事件流过程总结:
1.定义一个时间,继承自ApplicationEvent抽象类的类并重写相应的方法。
2.定义一个事件监听者,实现ApplicationListener接口,重写onApplicationEvent()方法。
3.使用事件发布者发布消息:可以通过ApplicationPublisher的publishEvent()方法发布时间消息。

适配器模式(Adapter)

将一个类的接口转换为另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。
职责链模式:使多个对象在一起处理请求,从而避免请求的发送者和接受者之间的耦合关系。将多个对象连成一条链并沿着链传递该请求直到处理完成为止。
SpringAop中spring就需要将每个Advice(通知)封装成Intercepter(拦截器)返回给容器,使用拦截器为方法进行增强,所以这里需要使用适配器模式对Advice进行封装。适配器接口定义了两个方法,一是判断通知类是否匹配适配器,二是传入适配器返回对于的拦截器。适配器模式在这里就是把通知类转换为拦截器,添加到拦截器集合中去。使用职责链模式对于拦截器集合进行遍历选择出匹配的拦截器执行实现通知类的功能。
在SpringMvc中解析到请求对应的Handler之后就交由HandlerAdapter统一处理Controller。HandlerAdapter作为期望得到的接口对目标类进行适配。这样不同的Controller就可以交由适配器进行统一处理,这样避免了DispatcherServlet去判断Controller类型。这样就是实现了解耦合并且有利于Controller的扩展。

工程方法模式

定义一个用户创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类中去。把创建对象的任务交给工厂,从而降低类与类之间的耦合。
在spring的ioc容器中就是将对象的控制权转移给Spring中,并有spring容器去创建和管理各实例之间的依赖关系。其中对象创建就是通过接口BeanFactory和其子类ApplicaContext的实现类等完成的。

依赖倒转原则:

高层模块不应该依赖于底层模块,二者都应该依赖于抽象(即接口)。抽象不应该依赖于细节,细节应该依赖于对象。
里氏代换原则:子类型必须能够替换掉它们的父类型。
DI是实现控制反转的一种设计,依赖注入就是将底层类的变量作为参数传入到上层对象中去。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值