责任链模式-过滤器-java-201806

1.责任链模式简介

2.案例说明

3.代码模拟演示

4.总结

1.0-责任链模式简介

责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。     

责任链接模式又称职责链模式,是一种对象的行为模式;它是一种链式结构,每个节点都有可能两种操作,要么处理该请求停止该请求操作,要么把请求转发到下一个节点,让下一个节点来处理请求;该模式定义了一些可能的处理请求的节点对象,请求的起点跟顺序都可能不一样,处理的节点根据请求的不一样而不同;请求者不必知道数据处理完成是由谁来操作的,内部是一个黑箱的操作过程,这是它的一个核心内容;

 

模式简介-责任链模式涉及到的角色如下所示:

抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Java接口实现。上图中Handler类的聚合关系给出了具体子类对下家的引用,抽象方法handleRequest()规范了子类处理请求的操作。

具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。

只要有下家,就传给下家处理;如果没有下家,就自行处理。因此,第一个处理者对象接到请求后,会将请求传递给第二个处理者对象。由于第二个处理者对象没有下家,于是自行处理请求。适用于: 链条式处理事情。工作流程化、消息处理流程化、事物流程化;

 

1.1-责任链模式分类

的与不纯的责任链模式

1,一个的责任链模式要求一个具体的处理者对象只能在两个行为中选择一个:一是承担责任,而是把责任推给下家。不允许出现某一个具体处理者对象在承担了一部分责任后又 把责任向下传的情况。 在一个纯的责任链模式里面,一个请求必须被某一个处理者对象所接收;在一个不纯的责任链模式里面,一个请求可以最终不被任何接收端对象所接收。 纯的责任链模式的实际例子很难找到,一般看到的例子均是不纯的责任链模式的实现

2,允许出现某一个具体处理者对象在承担了一部分责任后 把责任向下传的情况。

 

1.2 责任链优缺点

优点:责任的分担。每个类只需要处理自己该处理的工作(不该处理的传递给下一个对象完成),明确各类的责任范围,符合类的最小封装原则。

优点二:可以根据需要自由组合工作流程。如工作流程发生变化,可以通过重新分配对象链便可适应新的工作流程。

优点三:类与类之间可以以松耦合的形式加以组织.

缺点一:处理时以的形式在对象间传递消息,根据实现方式不同,有可能会影响处理的速度.

 

 

2.0-案例说明

1,工作中案例

2,程序中使用案例

3,工作流(审批流)

4,责任链模式之-web容器(tomcat)过滤器

2.1-工作中案例

举个栗子:

案例1(制造):

汽配厂组装汽车,有车身,车尾,车头…车灯… 不同组装模组小组按照各自的工作内容加工汽车组件,这种各种链接组装形成一条生产线组装汽车.

案例2(管理)

申请聚餐费用的大致流程一般是,由申请人先填写申请单,然后交给领导审批,如果申请批准下来,领导会通知申请人审批通过,然后申请人去财务领取费用,如果没有批准下来,领导会通知申请人审批未通过,此事也就此作罢。 不同级别的领导,对于审批的额度是不一样的,比如,项目经理只能审批80元以内的申请;部门经理能审批600元以内的申请;而总经理可以审核任意额度的申请(角色和职责).

 

2.2- 案例-流程图

案例1(制造):

案例2(管理):

过滤器与J2EE请求处理:

过滤器简略-流程图:

过滤器-类图:

过滤器-实现:

filter功能--

1. 在servlet被调用之前截获(做一些事情);

2. 在servlet被调用之前检查servlet request;

3. 根据需要修改request头和request数据;

4. 根据需要修改response头和response数据;

5. 在servlet被调用之后截获(做一些事情).

责任链模式的-一些作用:

1,全站中文乱码解决过滤器(请求编码转换)

2,敏感字符(关键字/脏话)过滤屏蔽

3,日志记录,(如:记录所有对网站发起请求的地址)

4,访问请求权限控制

5,跨源资源共享过滤器cors

6,全站GZIP压缩过滤器

7,HTML标记过滤器 等等......

2.3 过滤器的配置使用

web.xml的配置:

java代码 (简单的过滤器使用诞生了):

3.0-代码模拟演示

1,Tomcat过滤器精简模拟

3.1-模拟审批模拟类-1

1,审批流模拟

2,简单方法模拟

3,一个审批节点一个方法实现

4,代码运行演示 5,讨论

3.2- 模拟过滤器类-接口

1,该接口用于链式的存储和调用

2,用于具体的实现责任(处理的动作)

3,通过接口可以实现不相关类的相同行为,而不需要了解对象所对应的类。

4,通过接口可以指明多个类需要实现的方法。

5,通过接口可以了解对象的交互界面,而不需了解对象所对应的类。

3.3- 模拟过滤器类-启动类

1,该类存储MyFilter接口的多种具体实现。

2,该类是调用的入口

3,按队列先进先执行的顺序执行

3.4-模拟审批流类-2

1,审批模拟-节点类

3.5-模拟审批流类-2

1,审批流模拟代码里具体实现添加

2,结合过滤器的使用

3,实现接口

4,传入审批参数

5,运行审批

4.总结

责任链模式本质: 1,分离职责 2,动态组合(构成链) 3,有序

感谢大家观看!

如有错误请指出互相交流,让小弟也学习学习,谢谢!

猜你喜欢

转载自blog.csdn.net/niehida/article/details/88362716