源码中涉及模式的使用(持续总结)

本文探讨了设计模式在Spring框架与AbstractQueuedSynchronizer中的运用,包括模板方法模式、适配器模式、代理模式及观察者模式。通过具体实例分析,如SpringMVC的HandlerAdapter、AOP的动态代理、以及Spring事件监听的观察者模式,展示了这些模式如何提升软件的灵活性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、模板方法模式

1、在AQS中使用模板方法模式;(模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤的实现延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中某些步骤的具体实现

tryRelease() ;  tryAcquire() ; tryAcquireShared() ; tryReleaseShared()等方法只是骨架方法,具体实现在子类实现;之所以没有使用abstract修饰,是子类中一般都是 tryRelease--tryAcquire,tryReleaseShared--tryAcquireShared 等配对使用,为了减少开发者实现不必要的方法,所以没有使用abstract修饰

2、 适配器模式

实现方式: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的扩展了。

3、代理模式

实现方式: AOP底层,就是动态代理模式的实现。 
动态代理:在内存中构建的,不需要手动编写代理类
静态代理:需要手工编写代理类,代理类引用被代理对象。
实现原理: 
切面在应用运行的时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象创建动态的创建一个代理对象。SpringAOP就是以这种方式织入切面的。 
织入:把切面应用到目标对象并创建新的代理对象的过程。
 

4、观察者模式

spring的事件监听使用的是观察者模式,

观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。

观察者模式是一种对象行为型模式,其主要优点如下。

降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。

目标与观察者之间建立了一套触发机制。

它的主要缺点如下。

目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用。

当观察者对象很多时,通知的发布会花费很多时间,影响程序的效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值