- 10
- 0
- 约1.66万字
- 约 15页
- 2017-04-25 发布于重庆
- 举报
责任链模式进阶与AOP思想的融合与应用
责任链模式进阶:与AOP思想的融合与应用
一. AOP理念与责任链模式的融合
1、AOP理念概述
我们知道,面向对象的三大特性是继承、多态和封装,而封装就要求我们将功能分散到不同的对象中去,这在软件设计中往往称为 职责分配。从编程的角度上说,实质上也就是让不同的类设计不同的方法,这样代码就有组织地分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,增强代码可重用性。
但是人们也发现,在分散代码的同时,也增加了代码的冗余性,或者说代码重用的还不够彻底,什么意思呢?比如说,我们需要在两个类中都需要做日志的功能,按面向对象的设计方法,我们就必须在两个类的方法中都加入日志功能的代码,也许二者对日志的处理是完全相同的,但就是因为面向对象的设计让类与类之间无法联系,而不能将这些重复的代码统一起来。
也许有人会说,那好办啊,我们可以将这段代码写到一个独立的类的独立的方法里,然后在这两个类中分别调用相关方法。但是这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类。那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢?这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是 面向切面的编程(Aspect-Oriented Programming,AOP)。
一般而言,我们把切入到指定类指定方法的代码片段称为 切面,而把切面切入的目的地(类或方法)叫 切入点。其中,切面 是在AOP思想中引入的一种 新的编程单位,它使得 横切关注点模块化 ,这对现有的设计模式产生了非常重大的影响。根据AOP的理念,我们就可以把多个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。
总的来说,AOP实质上只是OOP的补充而已。OOP 从横向上区分出一个个的类来,而 AOP 则从纵向上向对象中加入特定的代码,也就是说 AOP 的出现使得OOP变得立体了。从技术上来说,AOP 基本上是通过 代理机制 实现的。AOP在编程历史上可以说是里程碑式的,对OOP编程是一种十分有益的补充。
2、AOP理念与CoR模式
概括地说,面向对象(Object-Oriented) 的分析和设计方法可以将真实世界的实体抽象成类和对象,从而实现了从问题域到软件的转换,这种方法能完美的抽象出问题域中的角色。但不同的角色可能有着共同的行为,这种共同的行为被称为 横切关注点。利用面向对象的方法不能很好地抽象出 横切关注点,从而导致了类间耦合度高、代码复用率低(冗余)等问题。而 AOP 的核心思想允许将分散在类中的共同逻辑(行为)分离出来,将OOP不能很好处理地横切关注点抽象在切面之中。
用传统的面向对象方法实现责任链模式虽然能够满足责任链模式要求的一切特征,在应用上也有很多实例,但是仍然存在者一些明显的缺陷和不足。比如,各个请求处理者除了实现自身应当处理的逻辑外还要实现责任链的结构(即successor属性及其Setter),也就是说,责任链的建立和指派包含在实现角色的类中,并没有抽象出来,这直接导致责任链的指派不够灵活。
AOP 思想的精髓能够将横向的关注点分离出来,这大大提高了我们认识世界和抽象世界的能力。实际上,责任链模式的缺陷主要在于具体实现角色的对象中存在着共同的行为——实现责任链结构的行为,而这些行为并没有被抽象出来,而用 AOP 改进责任链模式的关键就是要将责任链结构的实现用切面抽象出来,使得各个对象只关注自身必须实现的功能性需求。实际上,用AOP思想实现责任链模式时仍然保留了 Client,Handler 和 ConcreteHandler 三个角色,不同点是增加了实现责任链的切面,即 HandlerChain,下图反映了融合AOP思想后的责任链模式(以Filter为例)。利用AOP理念来改进责任链模式可以准确地分离出责任链模式中不同角色的共同行为。
实际上,无论是 Java Web 中的 Filter,还是 Struts2 中的 Interceptor,它们都是 责任链模式 与 AOP思想 互相融合的巧妙实践。
二. Filter 概述
事实上,Servlet API 还提供了一个重要接口 —— Filter。在我们开发 Web 应用时,若编写的Java类实现了这个接口,那么我们就可以将这个 Java 类称为一个过滤器(Filter)。Filter 可以认为是 Servlet 的一种加强版,它主要用于 对用户请求进行预处理 以及 对服务器响应进行后处理,是个 典型的处理链。下面的图示形象地反映了 Filter 的工作流程。
当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行过滤(拦截),
您可能关注的文档
最近下载
- 部编版语文四年级下册 第五单元综合能力提升卷(含答案).doc VIP
- 未成年人保护法解读与宣传.pptx VIP
- 2012江苏高考《伯父墓表》详解.ppt VIP
- Metformin 盐酸二甲双胍 药品 0.5g 说明书.pdf
- 致用英语口语教程(第三版)(上)Unit9课件PPT课件.pptx VIP
- SAP工艺简介SAP工艺简介.pdf VIP
- 提高术后手术间的归整率.docx VIP
- 硬笔书法纸可直接打印的口字格米字格田字格等模板.doc VIP
- 《Spark批处理技术与应用》课件——5. Spark机器学习(MLlib).pptx VIP
- 【中考真题】2024年北京中考数学试题及答案 .pdf VIP
原创力文档

文档评论(0)