思考职责链模式
①职责链的本质:分离职责,动态组合。分离职责是前提,动态组合才是职责链模式的精华所在,因为这意味着可以很方便地修改和添加新的处理对象,从而让系统更加灵活和具有更好的扩展性。
②职责链的动机:在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时需要有接受者,如果显式指定,将必不可少地带来请求发送者与接受者之间的紧耦合。而职责链模式可以将这两者解耦,使得发送者不必知道具体的接受者(处理者)
2. 功能链(如过滤器)
(1)概念:实际开发中,经常将一个请求在职责链中传递,每个职责对象负责处理请求的某一方面的功能,处理完后不是停止,而是继续向下传递请求,当请求通过很多职责对象处理后,功能也就完成了,把这样的职责链称为功能链。
(2)应用举例
①实际开发中,在业务处理之前,通常需要进行权限检查、数据校验、逻辑检查等,然后才开始真正的业务逻辑。可以把这些功能分散到一个功能链中。
②过滤器:每个过滤器负责自己的处理,然后转交给下一个过滤器,直到把所有的过滤器都走完(如权限检查、字符转换等)。
【编程实验】字符过滤器(模拟JavaWeb的双向过滤器,变式的职责链模式)
//声明文件
//*********************************************************************************************
//行为型模式:职责链模式
//场景:字符过滤(模拟JavaWeb的双向过滤器)
//当客户端发送给服务器时,request字符串被各个过滤器按顺序处理,
//而返回的response是逆着过滤器被调用顺序被处理的。(可参考下面的技巧)
//思路细节技巧:
//(1)Filter的doFilter方法改为doFilter(Request*,Resopnse*,FilterChain*),有
//FilterChain指针,为利用FilterChain调用下一个Filter做准备
//(2)FilterChain继承Filter,这样,FilterChain既是FilterChain又是Filter,那么
//FilterChain就可以调用